Windowsプロンプトでフォルダツリーのみコピー

例によって適当にフォルダとファイルを作成します。

C:\Users\takk\aaa> powershell -c "1..5 | %{$r=get-random; $dir=$r -replace('(...)','$&\\');mkdir dir1/$dir | out-null;echo HELLO > dir1/$dir/file.txt}"

このようなフォルダとファイルになりました。

C:\Users\takk\aaa>dir /b/s
C:\Users\takk\aaa\dir1
C:\Users\takk\aaa\dir1\142
C:\Users\takk\aaa\dir1\175
C:\Users\takk\aaa\dir1\482
C:\Users\takk\aaa\dir1\901
C:\Users\takk\aaa\dir1\966
C:\Users\takk\aaa\dir1\142\849
C:\Users\takk\aaa\dir1\142\849\345
C:\Users\takk\aaa\dir1\142\849\345\5
C:\Users\takk\aaa\dir1\142\849\345\5\file.txt
C:\Users\takk\aaa\dir1\175\882
C:\Users\takk\aaa\dir1\175\882\191
C:\Users\takk\aaa\dir1\175\882\191\1
C:\Users\takk\aaa\dir1\175\882\191\1\file.txt
C:\Users\takk\aaa\dir1\482\614
C:\Users\takk\aaa\dir1\482\614\778
C:\Users\takk\aaa\dir1\482\614\778\file.txt
C:\Users\takk\aaa\dir1\901\626
C:\Users\takk\aaa\dir1\901\626\234
C:\Users\takk\aaa\dir1\901\626\234\file.txt
C:\Users\takk\aaa\dir1\966\459
C:\Users\takk\aaa\dir1\966\459\308
C:\Users\takk\aaa\dir1\966\459\308\file.txt

C:\Users\takk\aaa>

ではdir1をコピーしてdir2を作ります。ただし、フォルダツリーのみでファイルはコピーしません。

C:\Users\takk\aaa>xcopy /t dir1 dir2
dir2 は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? d

C:\Users\takk\aaa>

/tオプションをつけることで、フォルダツリーのみコピーされました。

C:\Users\takk\aaa>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は C288-F709 です

 C:\Users\takk\aaa のディレクトリ

2017/07/10  21:50    <DIR>          .
2017/07/10  21:50    <DIR>          ..
2017/07/10  21:27    <DIR>          dir1
2017/07/10  21:50    <DIR>          dir2
               0 個のファイル                   0 バイト
               4 個のディレクトリ  167,918,505,984 バイトの空き領域

C:\Users\takk\aaa>dir /b/s dir2
C:\Users\takk\aaa\dir2\142
C:\Users\takk\aaa\dir2\175
C:\Users\takk\aaa\dir2\482
C:\Users\takk\aaa\dir2\901
C:\Users\takk\aaa\dir2\966
C:\Users\takk\aaa\dir2\142\849
C:\Users\takk\aaa\dir2\142\849\345
C:\Users\takk\aaa\dir2\142\849\345\5
C:\Users\takk\aaa\dir2\175\882
C:\Users\takk\aaa\dir2\175\882\191
C:\Users\takk\aaa\dir2\175\882\191\1
C:\Users\takk\aaa\dir2\482\614
C:\Users\takk\aaa\dir2\482\614\778
C:\Users\takk\aaa\dir2\901\626
C:\Users\takk\aaa\dir2\901\626\234
C:\Users\takk\aaa\dir2\966\459
C:\Users\takk\aaa\dir2\966\459\308

C:\Users\takk\aaa>

次にこのdir2をコピーしてdir3を作成してみましょう。

C:\Users\takk\aaa>xcopy /t dir2 dir3
dir3 は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? d

C:\Users\takk\aaa>

コピーできたか確認します。

C:\Users\takk\aaa>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は C288-F709 です

 C:\Users\takk\aaa のディレクトリ

2017/07/10  21:50    <DIR>          .
2017/07/10  21:50    <DIR>          ..
2017/07/10  21:27    <DIR>          dir1
2017/07/10  21:50    <DIR>          dir2
               0 個のファイル                   0 バイト
               4 個のディレクトリ  167,918,374,912 バイトの空き領域

C:\Users\takk\aaa>

dir3が作られていません。xcopyの/tオプションは、ファイルが格納されていないフォルダは無視されるからです。
空フォルダの場合でもコピーする/eオプションと併用します。

C:\Users\takk\aaa>xcopy /t/e dir2 dir3
dir3 は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? d

C:\Users\takk\aaa>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は C288-F709 です

 C:\Users\takk\aaa のディレクトリ

2017/07/10  22:04    <DIR>          .
2017/07/10  22:04    <DIR>          ..
2017/07/10  21:27    <DIR>          dir1
2017/07/10  21:50    <DIR>          dir2
2017/07/10  22:04    <DIR>          dir3
               0 個のファイル                   0 バイト
               5 個のディレクトリ  167,918,379,008 バイトの空き領域

C:\Users\takk\aaa>

dir3のツリーを確認してみましょう。

C:\Users\takk\aaa>tree dir3
フォルダー パスの一覧
ボリューム シリアル番号は 00000014 C288:F709 です
C:\USERS\TAKK\AAA\DIR3
├─142
│  └─849
│      └─345
│          └─5
├─175
│  └─882
│      └─191
│          └─1
├─482
│  └─614
│      └─778
├─901
│  └─626
│      └─234
└─966
    └─459
        └─308

C:\Users\takk\aaa>

問題なくフォルダツリーができました。

コメント

タイトルとURLをコピーしました