robocopyの使い方メモ


このエントリーをはてなブックマークに追加

robocopyというコマンドを使って、Windowsでタイムスタンプを保持してフォルダまるごとコピーするときの自分用メモです。

基本的な使い方

基本コマンドは以下の通り。(src)と(dst)にはそれぞれコピー元フォルダ、コピー先フォルダを入れてください。

robocopy  (src) (dst) /E /COPY:DAT /DCOPY:DAT /r:3 /w:1 /LOG:copy.log /xd "$RECYCLE.BIN" /xd "System Volume Information"

他のオプションの意味は以下の通り。

  • /E: 空のディレクトリもコピー
  • /COPY:DAT: ファイルのデータ、属性、タイムスタンプをコピー
  • /DCOPY:DAT: ディレクトリのデータ、属性、タイムスタンプをコピー
  • /r:3 /w:1: コピー不能なファイルがあったとき、3回リトライ。リトライの間隔は1秒。デフォルト値の設定だとリトライが終わらない。
  • /LOG:copy.log: ログをcopy.logファイルに保存
  • /xd "$RECYCLE.BIN": ごみ箱はコピー対象から外す
  • /xd "System Volume Information"": 隠しシステムフォルダはコピー対象から外す

バッチファイルの名前に関する注意点

robocopy.batというバッチファイルを作って、その中でrobocopyを呼び出すと、robocopyコマンドではなくrobocopy.batが呼び出されてしまうので、無限ループに陥ってしまいます。バッチファイルの名前を変えましょう。

コピー先のフォルダが見えなくなる?

コピー元をドライブ、コピー先をフォルダとすると、なぜかコピー後にコピー先のフォルダが見えなくなる現象が発生しました。以下にそのときの状況を記します。

使ったコマンドは以下です。ここで、 コピー前にはC:\dir1が存在していてC:\dir1\dir2が存在していない状態でした。

robocopy  E:\  C:\dir1\dir2  /E /COPY:DAT /DCOPY:DAT /r:3 /w:1 /LOG:copy.log /xd "$RECYCLE.BIN" /xd "System Volume Information"

コピーは行われたのですが、なぜかC:\dir1\dir2フォルダに隠し属性がついていて、エクスプローラーから見えませんでした。恐ろしいことに、エクスプローラーのオプションで「隠しファイル、隠しフォルダー、および隠しドライブを表示する」を有効にしていたとしても、コピー先のフォルダは見えません。エクスプローラーのオプションで「保護されたオペレーティング システム ファイルを表示しない(推奨)」を庵チェックすることでようやくコピー先のフォルダが見えるようになります。

ちなみにCygwinからは何もしなくてもコピー先のフォルダが見えました。

どうも After Robocopy, the copied Directory and Files are not visible on the destination Drive - Stack Overflow で説明されているように、あるドライブのルートを、あるフォルダにコピーしようとしたときに、コピー先のフォルダが見えなくなることがあるようです。

この現象を回避するには、robocopy

/A-:SH

というオプションをつければOKです。

すでにコピーが終わってしまったあとでも手はあります。コピー先のフォルダに対して

attrib -h -s C:\dir1\dir2

とすれば、隠しフォルダを普通のフォルダに戻せます。

参考リンク