robocopyコマンドでwindows端末のデータをバックアップする方法


はじめに

仕事柄、Windows端末のデータをバックアップすることがよくあるのだけど、今まではコマンドプロンプトでxcopyコマンドを使い、データのコピーを取っていました。

例えばCドライブにある自分のデスクトップ上のファイルを、全て別のドライブにバックアップしておきたいときなどは、xcopyコマンドでディレクトリごとコピーができます。

xcopy.bat
xcopy C:\Users\himrox\Desktop E:\Backup /E /C /H

オプションなど詳しくは http://www.k-tanaka.net/cmd/xcopy.php を見てください。

しかし、xcopyには致命的な欠点があって、コピー元のファイルの中に255バイトを超えるパスがあると、「メモリが足りません」とエラーが出てコピーできないというのだ。

xcopyで「メモリが足りません」

なにかxcopyに替わるいい方法はないかと探していたところ、robocopyコマンドが使えそうだとわかってきました。

robocopyコマンドの使い方

robocopyコマンドの基本的な使い方はシンプルで、以下のようなコマンドでディレクトリごとコピーがされます。

robpcopy.bat
robocopy (コピー元のディレクトリ) (コピー先のディレクトリ) (オプション)

robocopyで先程xcopyで実行したコマンドを書き直すと、こんな感じです。

robpcopy.bat
robocopy C:\Users\himrox\Desktop E:\Backup /E /R:0 /W:0 /XJD /XJF /LOG:backup.log

robocopyコマンドは、xcopyと違い、パスのサイズに制限はなく、詳細なログも出力されます!
また、robocopy /? でコマンドの使い方を知ることができます。

主に使うオプションを詳しく見ていきたいと思います。

robocopyコマンドのオプション

コピーオプション

  • /S サブディレクトリをコピーしますが、空のディレクトリはコピーしません。
  • /E 空のディレクトリを含むサブディレクトリをコピーします。
  • /MIR ディレクトリ ツリーをミラー化します。

/Sや/Eのオプションでは、コピー元のファイルを削除してから、もう一度実行してもコピー先のファイルは残ります。
それに対して/MIRオプションでは、コピー元で削除されたデータはコピー先でも削除されるので、注意が必要です。

再試行オプション

  • /R:n 失敗したコピーに対する再試行数: 既定値は 1,000,000。
  • /W:n 再試行と再試行の間の待機時間: 既定値は、30 秒です。

このあたりはやたら規定値が大きく設定されているので、特に理由がなければ/R:0と/W:0をオプションに指定しておいたほうがよいでしょう。

ファイル選択オプション

  • /XJD フォルダの接合ポイントを除外します。
  • /XJF ファイルの接合ポイントを除外します。

ジャンクションという特殊ファイルをコピー対象から外します。こちらも特に理由がなければ指定しておきます。

ログオプション

  • /LOG:ファイル ログファイルに状態を出力します (既存のログを上書きします)。
  • /LOG+:ファイル ログファイルに状態を出力します (既存のログ ファイルに追加します)。

ログファイルの出力先を設定できます。ログはコマンドプロンプトにも表示されますが、定期的にバックアップを取るときなどは、ログファイルに出力しておくといいでしょう。

この他にも様々なオプションがありますが、よく使うオプションはこんなところです。

参考

Windowsのrobocopyコマンドでフォルダーをバックアップ/同期させる
パソコンのファイルをrobocopyで手堅くバックアップする方法