はじめに
仕事柄、Windows端末のデータをバックアップすることがよくあるのだけど、今まではコマンドプロンプトでxcopyコマンドを使い、データのコピーを取っていました。
例えばCドライブにある自分のデスクトップ上のファイルを、全て別のドライブにバックアップしておきたいときなどは、xcopyコマンドでディレクトリごとコピーができます。
xcopy C:\Users\himrox\Desktop E:\Backup /E /C /H
オプションなど詳しくは http://www.k-tanaka.net/cmd/xcopy.php を見てください。
しかし、xcopyには致命的な欠点があって、コピー元のファイルの中に255バイトを超えるパスがあると、「メモリが足りません」とエラーが出てコピーできないというのだ。
なにかxcopyに替わるいい方法はないかと探していたところ、robocopyコマンドが使えそうだとわかってきました。
robocopyコマンドの使い方
robocopyコマンドの基本的な使い方はシンプルで、以下のようなコマンドでディレクトリごとコピーがされます。
robocopy (コピー元のディレクトリ) (コピー先のディレクトリ) (オプション)
robocopyで先程xcopyで実行したコマンドを書き直すと、こんな感じです。
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で手堅くバックアップする方法