robocopyコマンドはディレクトリ、ファイルの同期やコピーをしてくれる。ディレクトリ配下を同期したい場合、良く紹介されているオプションは/MIR
であり、srcにないファイルの削除も含めて完全同期してくれる。
robocopy C:\src_folder D:\dest_folder /mir
/MIR
はその名の通りディレクトリツリーをミラー化してくれる。/E /PURGE
を指定したことと同じで、「空のディレクトリを含むサブディレクトリをコピー」し、「既にコピー元に存在しないコピー先のファイル/ディレクトリを削除」する。
しかし、/MIR
オプションは一般的な感覚と異なり、ファイルのタイムスタンプは維持してくれるものの、フォルダのタイムスタンプは維持してくれない。
この理由は、/MIR
自体にあるのではなく、robocopyの別のオプションのデフォルト値によるもの。
ファイルコピーに関するデフォルトは、robocopy /?
によると以下の通りになっており、データ、属性、タイムスタンプがコピーされる。
/COPY:コピーフラグ :: ファイルにコピーする情報 (既定値は /COPY:DAT)。
(コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
(S= セキュリティ =NTFS ACL、O= 所有者情報、U= 監査情報)。
一方、ディレクトリに関するデフォルトは記載されていない。タイムスタンプをコピーしたければ、以下のオプションを付けるようになっている。
/DCOPY:T :: ディレクトリ タイムスタンプをコピーします。
タイムスタンプを含めた完全同期を行いたい場合は、/DCOPY:T
を指定しなければいければいけない。
robocopy C:\src_folder D:\dest_folder /mir /DCOPY:T