Windwos バッチ(bat)で、フォルダを比較して無い物だけをコピーする方法をご紹介します。
サブフォルダ下のファイルも対象です。
サンプルコード形式で、バッチファイルにコピペとダブルクリックですぐ使えます。
それでは見ていきましょう!
サブフォルダも含めて無い物だけをコピー
例えば次のようなフォルダ構成を想定します。
batch_file.bat
ext
A
├── text_a.txt
└── image
└── jpeg_a.jpg
ext
フォルダがコピー先です。今は何も入っていません。A
フォルダがコピー元です。A
フォルダにはimage
というサブフォルダがあり、ファイルが格納されています。
ext
フォルダにまるっとコピーできればOKです。
サンプルコードがこちらです。
batch_file.batなどのバッチファイルを作成し、下記の内容をコピペしてください。
ファイル名は適宜変えて貰ってOKです。
@echo off
set "source_folder=.\A"
set "destination_folder=.\ext"
robocopy "%source_folder%" "%destination_folder%" /E /XO
pause
set "source_folder=.\A"
にはコピー元のフォルダを指定します。set "destination_folder=.\ext"
はコピー先のフォルダです。
実行するとこのようになります。
ちなみに、コピー先のフォルダにあるファイルの方が新しい場合は上書きしません。
2つのフォルダから無い物だけをコピー
今度はコピー元を複数設定してみます。
@echo off
set "source_folder=.\A"
set "destination_folder=.\ext"
robocopy "%source_folder%" "%destination_folder%" /E /XO
set "source_folder=.\B"
set "destination_folder=.\ext"
robocopy "%source_folder%" "%destination_folder%" /E /XO
pause
新たにBフォルダをコピー元に追加しました。
Aフォルダを真似て、ファイル名をbに変えてあります。
実行するとこのようになります。
先ほどコピーしていたtext_a.txtなどは元のままtext_b.txtが追加されました。
うまくマージできています。
サブフォルダを含めず上書きコピー
あえてサブフォルダを含めずに、ファイルが新しいかを気にせずに上書きコピーするバージョンもやってみます。
サンプルコードは次の通りです。
@echo off
set "source_folder=.\A"
set "destination_folder=.\ext"
robocopy "%source_folder%" "%destination_folder%"
pause
変わったのは次の部分ですね。robocopy "%source_folder%" "%destination_folder%"
と、robocopy "%source_folder%" "%destination_folder%" /E /XO
です。
/E
オプションは、サブディレクトリを再帰的にコピーする引数です。/X0
オプションは、既存のファイルよりも新しいファイルのみをコピーする引数です。
あとは組み合わせ応用です。
コピー元をもっと増やしたり、フォルダによって上書き有りにしたり、自由に改変してご使用ください。
今回は以上となります。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!