【Windows】バッチ(bat)とrobocopyで無い物だけ差分でファイルコピー

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オプションは、既存のファイルよりも新しいファイルのみをコピーする引数です。

あとは組み合わせ応用です。
コピー元をもっと増やしたり、フォルダによって上書き有りにしたり、自由に改変してご使用ください。

今回は以上となります。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次