Jiro Laboratory

C#、ASP.NET、JavaScript、Androidとか

robocopy を使って差分ファイルを別フォルダにコピー

2つのフォルダの内容を比較して、差分ファイルだけを別フォルダにコピーする方法です。
サブディレクトリのあるフォルダも対象にできます。

目的

フォルダAとフォルダBの内容を比較して、差分をフォルダCにコピーしたい。
たとえば、Aには古いバージョン、Bには新しいバージョンのファイルが入っているとして、
・A → Bで追加・変更されたファイルだけを抽出して別フォルダにコピー
・フォルダA・Bの内容は変更しない
ということを実現するのが目的です。

こういうフリーのツールがありました。

・指定した2つのフォルダ間で、ファイル名・ファイルサイズ・更新時間で比較し、それを指定したフォルダにコピーまたは移動する、差分ファイル取得ツールです。
・フォルダの階層を維持したまま保存します(ミラーリングコピー)。
・比較するフォルダとは別の保存先を指定することができます。

Saboon!(サブーン)の詳細情報 : Vector ソフトを探す!

このツールでも良いのですが、差分がなくてもフォルダ構成だけはコピーされてしまう(空ディレクトリが作成される)点が自分の要件とマッチしませんでした。

その代わりとして、robocopy を使用する方法を次に紹介します。

robocopy を使用する方法

例として、以下の2つのフォルダを比較する前提で手順を記載します。

dir1 比較元フォルダ
dir2 比較先フォルダ

事前準備

まず、作業用にワークフォルダを作成しておきます(中身は空でOK)

old 比較元ワーク
new 比較先ワーク

コマンド実行

次に robocopy コマンドを使用して

  1. 比較元をワークにコピー
  2. 比較先をワークにコピー
  3. oldとnewで一致するファイルをoldにmoveする(一致しないものだけがnewに残る)

を行います。

実際のコマンドは以下のようになります。

  1. robocopy dir1 old /mir *1
  2. robocopy dir2 new /mir
  3. robocopy new old /xc /xn /xo /xx /xl /is /mov

*1:ミラー指定しておけば、ワークに余計なファイルがあっても勝手に除去してくれます