Windows robocopyでお手軽バックアップ」という記事でフォルダをまるごとコピーする方法を書いたので、今度は差分のみコピーする方法です。

「差分のみコピー」ということは、「更新されていないファイルはコピーしない」ということです。
つまり、「コピー元とコピー先を比較して、コピー元の方が古いファイルはコピーしない(何もしない)」です。


ちなみに、「バックアップ」という観点で書いているので、コピー先にのみ新しいフォルダ or ファイルが有ってマージが必要、ということは想定していません。「コピー先」は常に「コピー元」からのみ更新される、という前提です。
2つのフォルダのマージ、ということをするのであれば WinMerge などでファイルの中身まで正しく比較する必要があると考えます。


以下、具体的な例とコマンド例です。

フォルダ構成とコピーされるものの例:
customerA(コピー元フォルダ)backupA(コピー先フォルダ)
ファイル名タイムスタンプファイル名タイムスタンプ
file012013/7/14 0:25→×(タイムスタンプが同じなのでコピーしない)file012013/7/14 0:25
file022013/7/15 0:25→(存在しないのでコピー)
file032013/7/15 0:25→(タイムスタンプが古い(更新された)のでコピー)file032013/7/10 0:25
file042013/7/15 0:25→×(タイムスタンプが新しいのでコピーしない)file042013/7/15 1:30


コマンド:
robocopy D:\customerA D:\backupA /MIR /XA:SH /XO


/MIR
ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)
/E 空のディレクトリを含むサブディレクトリをコピーします。
/PURGE 既にコピー元に存在しないコピー先のファイル/ディレクトリを削除します。

/XA:SH
指定されたいずれかの属性が設定されているファイルを除外します。
「S」システムファイル、「H」隠し属性ファイルを除外します。例えば、「Thumbs.db」が除外されます。

/XO
古いファイルを除外します。


実行した結果は以下のとおりです。
想定通りの差分コピー(01と04のファイルがスキップされ、02と03のみがコピー)されています。

-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

開始: Mon Jul 15 02:36:59 2013

コピー元 : D:\customerA\
コピー先 : D:\backupA\

ファイル: *.*

オプション: *.* /S /E /COPY:DAT /PURGE /MIR /XO /XA:SH /R:1000000 /W:30

------------------------------------------------------------------------------

4 D:\customerA\
新しいファイル 1 file02.txt
0%
100%
より新しい 2 file03.txt
0%
100%

------------------------------------------------------------------------------

合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 1 0 1 0 0 0
ファイル: 4 2 2 0 0 0
バイト: 5 3 2 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00


速度: 1000 バイト/秒
速度: 0.057 MB/分

終了: Mon Jul 15 02:36:59 2013