ROBOCOPYでディレクトリのタイムスタンプが維持できない時

ROBOCOPYのオプションには、ディレクトリに対するコピーフラグがあり、次のような感じになっています。

/DCOPY:コピーフラグ…ディレクトリにコピーする情報 (既定値は /DCOPY:DA)
(コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)

なので、タイムスタンプを維持したいときは、/DCOPY:DTとか、/DCOPY:DATとかやると思います。

しかし、いくつかのOSバージョン(XPから10/2018まで)で試してみたところ、このオプション(フラグT)はWin8.xまたはWin2016以降でないと有効に働かないように見えます(他にも細かい不具合があり、8.1以降/2018以降でやっとまともになった感じです)。

ちなみに、大量のフォルダ/ファイルをコピーするときには、/MTで並列度を上げるよりも、

  • 管理者権限のDOS窓を複数開く
  • スレッド数はある程度抑える(様子を見ながら増減)
  • 各窓でマウントするNETBIOS名は変える(注※)

方が、トータルの速度は上がるようです。

注※(実効コピー速度を上げる方法)

例えば、10.0.0.1という共有サーバを

net use x: \\10.0.0.1\share1 ...
net use y: \\10.0.0.1\share2 ...

という形でマウントし、X:からY:へコピーをするよりも、C:\Windows\System32\drivers\hosts 内で

# 同じCIFS共有ドライブを複数のNETBIOS名で定義する
10.0.0.1   CIFSx
10.0.0.1   CIFSy

とし、

net use x: \\CIFSx\share1 ...
net use y: \\CIFSy\share2 ...
robocopy x: y: ...

とした方が、断然速いです。

このshare1からshare2へのコピーの並列度を上げる場合は、C:\Windows\System32\drivers\hosts 内で

10.0.0.1   CIFSx1
10.0.0.1   CIFSx2
10.0.0.1   CIFSx3
10.0.0.1   CIFSy1
10.0.0.1   CIFSy2
10.0.0.1   CIFSy3

のように定義し、

net use j: \\CIFSx1\share1 ...
net use k: \\CIFSx2\share1 ...
net use l: \\CIFSx3\share1 ...
net use m: \\CIFSy1\share2 ...
net use n: \\CIFSy2\share2 ...
net use o: \\CIFSy3\share2 ...

としてマウントしたあと、管理者権限のDOS窓を開いて

# 窓1で実行
robocopy j:\sub1 m:\sub1 ...
# 窓2で実行
robocopy k:\sub2 n:\sub2 ...
# 窓3で実行
robocopy l:\sub3 o:\sub3 ...

というようにした方が、速いです。

※窓の数や、各窓内の/MT:nの値は、実環境で何パターンかテストして決めて下さい。