次のような構造で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はmachine_name、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に移動します。
一言で言えば:システムやマシンのハードウェアリソースを殺さないコピーバッチを段階的にログに記録します。
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
)
)
)
これにより、sub_sub_sub_folders内のファイルのみがコピーされます。for /d
はディレクトリに対してのみ反復するため、上位レベルのフォルダー内のファイルはすべて無視されます。