読者です 読者をやめる 読者になる 読者になる

WindowsのROBOCOPYコマンドでタイムスタンプを維持したままコピーする

はじめに

ペルソナQをDL販売で買おうと思ったらSDカードの容量が足りないじゃん!

というわけで、容量の大きいものに交換することにしました。コピー自体は普通にSDカード内のフォルダごとコピーしてやればいいようです。

パソコンを使ってデータを移動する場合は、「Nintendo 3DS」フォルダをコピーすることによって、元のSDカードに保存されていたダウンロードソフトやゲームのセーブデータを新しいSDカードに引き継ぐことができます。 ニンテンドー3DS|Q&A|Nintendo http://www.nintendo.co.jp/3ds/support/qa/

…が、この場合ファイルのタイムスタンプが更新されてしまうので、写真などが保存されている場合は日時が変わってしまう様子。

Windowsの場合はFire File Copy等のツールを使ってタイムスタンプを維持したままコピーすることが多いようですが、ちょっと調べてみると標準*1ROBOCOPYコマンドを使用すればできそうだったので、やってみました。

環境

ROBOCOPYコマンド

ROBOCOPYコマンドのヘルプを見てみると、こんなことが書いてあります。

C:\> ROBOCOPY /?
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                              
-------------------------------------------------------------------------------

  開始: 2014年6月6日 3:39:31
              使用法:: ROBOCOPY コピー元 コピー先 [ファイル [ファイル]...] [オプション]

           コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー\共有\パス)。
           コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー\共有\パス)。
           ファイル :: コピーするファイル (名前/ワイルドカード: 既定値は「*.*」です)

::
:: コピー オプション:
::
                 /S :: サブディレクトリをコピーしますが、空のディレクトリはコピーしません。
                 /E :: 空のディレクトリを含むサブディレクトリをコピーします。
…
 /COPY:コピーフラグ :: ファイルにコピーする情報 (既定値は /COPY:DAT)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
                       (S= セキュリティ =NTFS ACL、O= 所有者情報、U= 監査情報)。
…
/DCOPY:コピーフラグ :: ディレクトリにコピーする情報 (既定値は /DCOPY:DA)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
…

というわけで、こんな感じのオプションをつけて実行します。 (D:\Nintendo 3DS を C:\tmp\Nintendo 3DS にコピー)

C:\> ROBOCOPY "D:\Nintendo 3DS" "C:\tmp\Nintendo 3DS" /E /COPY:DAT /DCOPY:T

/COPY オプションで D を付け忘れるとファイルがコピーされないので注意です(しばらくハマった)。

うまくいくとこんな感じに出力されます。最後の「合計」と「コピー済み」が一致していればOKです。

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

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

  開始: 2014年6月6日 3:58:21
   コピー元 : D:\Nintendo 3DS\
     コピー先 : C:\tmp\Nintendo 3DS\

    ファイル: *.*

  オプション: *.* /S /E /DCOPY:T /COPY:DAT /R:1000000 /W:30

…

100%      新しいファイル                      80        00000002.cmd
        新しいディレクトリ       0      D:\Nintendo 3DS\Private\
        新しいディレクトリ       1      D:\Nintendo 3DS\Private\00020400\
100%      新しいファイル                  456024        phtcache.bin

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

                  合計     コピー済み      スキップ       不一致        失敗
Extras
   ディレクトリ:        30        30         0         0         0         0
     ファイル:        26        26         0         0         0         0
      バイト:   1.819 g   1.819 g         0         0         0         0
       時刻:   0:00:10   0:00:09                       0:00:00   0:00:01


       速度:           215021863 バイト/秒
       速度:           12303.649 MB/分
   終了: 2014年6月6日 3:58:32

エクスプローラで見てみると、タイムスタンプも更新されず、そのままコピーできました。

f:id:ser1zw:20140606040959p:plain

というわけで

ペルソナQやりましょう

参考

*1:Windows Vista以降に含まれています