ファイルとフォルダ構造を1つずつコピーし、結果を確認してレポートをtxtに保存するバッチファイル

ファイルとフォルダ構造を1つずつコピーし、結果を確認してレポートをtxtに保存するバッチファイル

次のような構造で、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_folderA14 個のファイル属性をすべて読み取ってコピーし、それを貼り付け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 内のファイルのみがコピーされます。ディレクトリのみを反復処理するため、上位レベルのフォルダー内のファイルは無視されます。

関連情報