
次のような構造で、100 万を超える (小さいサイズの) ファイル (<500kB jpg) があります。
H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folder
各 sub_sub_sub_folder には 10 ~ 15 個のファイルがあり、sub_sub_folder は日付/時刻スタンプ、sub_folder はマシン名、folder は別の増分番号になります。
同じ構造の main_folder のコピーが必要ですが、コピーがソースと 100% 同じであることを確認する必要があります。Windows エクスプローラーは、約 1000 コピー後にブロックされ、プロパティ (サイズ、ディスク上のサイズ、内容) も表示されません。
H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA
14 個のファイル属性をすべて読み取ってコピーし、それを貼り付けZ:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA
、log.txt ファイルを開いて次のように書き込むバッチが必要です。
「file1.jpg 490kB が H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA から Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA に正常にコピーされました...」
そして
「file15.jpg 470kB が H:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA から Z:\main_folder\folder\sub_folder\sub_sub_folder\sub_sub_sub_folderA に正常にコピーされました」
等
ログの終わりをマークし(1行の======か何か)、その後にのみ次の操作(sub_sub_sub_folderBの内容とフォルダ構造のコピー)に進みます。コピー操作が正常に終了しなかった場合は停止し、新しいログerror_sub_sub_sub_folderB.txtを作成します(次のログはerror_sub_sub_sub_folderZ.txtになります)。ログが作成された後にのみ、次のsub_sub_sub_folderに移動します。
簡単に言うと、システムやマシンのハードウェア リソースを破壊しない、ステップ バイ ステップのログ コピー バッチです。
答え1
xcopy と robocopy はどちらも機能しますが、robocopy の出力はあなたが説明した内容に近いです。
xcopy src dst /i /e /f /v /c > log.txt
/F は完全なソース パスと宛先パスを出力します。
/V はファイル サイズを確認すると言われていますが、出力には表示されません。
ファイル サイズがログに記録されないことを除けば、これはあなたが説明したことをほぼ実現します。ACL と属性がコピーされるかどうかを制御できる他のスイッチがあります。ネイティブ exe なので、スクリプト ループよりも高速になります。ただし、個別のエラー ログは取得されず、エラー時にサブフォルダーを中止して次のサブフォルダーに進むことはできません (/C はエラー時にすべてのファイルを続行します)。
サンプル出力:
C:\Users\Celery\test>xcopy src dst /i /e /f /v /c
C:\Users\Celery\test\src\a\blah.txt -> C:\Users\Celery\test\dst\a\blah.txt
C:\Users\Celery\test\src\a\blah2.txt -> C:\Users\Celery\test\dst\a\blah2.txt
C:\Users\Celery\test\src\b\blah.txt -> C:\Users\Celery\test\dst\b\blah.txt
C:\Users\Celery\test\src\b\blah2.txt -> C:\Users\Celery\test\dst\b\blah2.txt
4 File(s)
Robocopy は、ファイル サイズを含むかなり詳細なログを生成します。次を試してください:
robocopy src dst /e /np /log:log.txt [/tee]
サンプル出力:
C:\Users\Celery\test>robocopy src dst /e
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Thursday, 22 January 2015 10:58:55 PM
Source : C:\Users\Celery\test\src\
Dest : C:\Users\Celery\test\dst\
Files : *.*
Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
New Dir 0 C:\Users\Celery\test\src\
New Dir 2 C:\Users\Celery\test\src\a\
New File 17 blah.txt
New File 17 blah2.txt
New Dir 2 C:\Users\Celery\test\src\b\
New File 17 blah.txt
New File 17 blah2.txt
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 3 3 0 0 0 0
Files : 4 4 0 0 0 0
Bytes : 68 68 0 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Speed : 2193 Bytes/sec.
Speed : 0.125 MegaBytes/min.
Ended : Thursday, 22 January 2015 10:58:55 PM
それ以外の場合、反復処理を自分でスクリプト化するには、次のように 4 つのネストされたループが必要になります。
for /d %%a in (main_folder\*) do (
for /d %%b in (%%a\*) do (
for /d %%c in (%%b\*) do (
for /d %%d in (%%c\*) do (
:: code to copy files and write logs goes here
)
echo ================= end of %%d =============== >> log.txt
)
)
)
for /d
これにより、sub_sub_sub_folders 内のファイルのみがコピーされます。ディレクトリのみを反復処理するため、上位レベルのフォルダー内のファイルは無視されます。