robocopyの基本的な使い方とタスクスケジューラーでの活用例

本記事では、フォルダやファイルをコピー、同期するときに役立つrobocopyコマンドについて紹介します。

robocopyとは

robocopyとはデータをコピー、同期してくれるツールです。Windows OSに標準でインストールされています。

手動でのコピーとは違い、特定の条件(更新日時、ファイル属性、ファイルサイズ、ファイルの種類、ファイル名など)で絞ってコピーを実行したり、ログを出力したりすることができます。

基本的な使い方は、以下のようにコピー元、コピー先、オプションを指定して、コマンドプロンプトにて実行します。

robocopy <コピー元> <コピー先> <オプション>	

コピー元、コピー先にはフォルダパスを指定します。コピー先のフォルダが存在しない場合は、新たに作成されます。

オプション

robocopyには様々なオプションがあります。

オプションを付けることでコピーが失敗した時の保険を掛けたり、コピーするファイルの対象を絞ったりすることができます。

本章では、役立つオプションを抜粋してご紹介します。

/COPYALL

全てのデータをコピーするコマンドです。

robocopyのコピー対象項目は既定値であれば、ファイルデータ、ファイル属性、タイムスタンプです。

しかし、/COPYALLオプションを付けることで、ファイルアクセス許可情報、所有者情報や監査情報といったデータもコピーすることができます。

/S, /E

rpbpcopyでは、特にオプションを付けていないとファイルのみがコピーされますが、

/S, /Eをオプションに付ける事でフォルダもコピーされるようになります。

/Sは空フォルダをコピーしませんが、/Eは空フォルダもコピーします。要件に合わせてどちらかを設定します。(空フォルダもコピーする場合、/S, /Eの両方つけても問題ありません。)

/Z

再起動可能モードでコピーできます。

再起動可能モードを設定しておくと、もし何かしらの原因で中断した場合でも、途中から再開してくれるようになります。

大量のデータをコピーするときに設定しておきたいオプションです。

/R:0, /W:0

/R:0はコピーに失敗した際の試行回数を指定できます。例として試行回数0を指定している場合のコマンドを記載しております。デフォルトでは1000000回となっているので、このオプションを用いて試行回数を指定する事が推奨されます。

/W:0は再試行と再試行の間に待機する時間を指定できます。こちらもデフォルトでは30秒となっているので、0秒もしくは1秒に指定する事が多いです。

これらのコマンドは基本的に両方合わせて使用されます。

/log:<ログ保存先>

ログ保存先にファイルパスを指定して、指定されたファイルにログを書き込みます。

このオプションを設定することで、以下のようなメリットがあります。

  • タスクスケジューラを用いて自動で実行させた際、robocopyの実行結果を後から確認できる
  • エラー発生時にどこまで実行されているかなどの確認ができる
  • 大量のファイル、フォルダをコピーしてログが、コマンドプロンプトに表示しきることができない際でも、問題なくログを確認できる

ファイルが既に存在している場合、既存の内容は破棄され新規作成されます。

/XJ

ジャンクションポイントとシンボリックリンクを除外します。

これを設定しないと無限コピーに陥る可能性がありますので、設定する事が推奨されます。

/MAXAGE, /MINAGE

/MAXAGE:YYYYMMDDと指定すると、更新日時が指定した日時よりも新しいファイルのみコピーされます。/MINAGEの場合は、更新日時が指定した日時よりも古いファイルのみコピーされます。

また、/MAXAGE:nと指定すると、n日前よりも新しいファイルのみコピーされます。

/MINAGE:nの場合は、n日前よりも古いファイルのみコピーされます。

※ なお、nは1900未満の整数を設定可能です
※これらのコマンドは併用可能です。

/MAX, /MIN

/MAX:nと指定すると、nバイトよりも大きいファイルを除外します。

/MIN:nと指定すると、nバイトよりも小さいファイルを除外します。

※これらのコマンドは併用可能です。

ファイル名やファイルの種類の指定

以下のようにすることで、特定のファイル名のファイルのみコピーすることができます。

robocopy <コピー元> <コピー先> <ファイル名>

また、*(ワイルドカード)を使うことで、特定のファイルの種類のみコピーすることができます。

以下はテキストファイルのみコピーする際のコマンドとなります。

robocopy <コピー元> <コピー先> *.txt

タスクスケジューラーを用いたrobocopy

最後に、robocopyの活用例を1つご紹介します。

今回は、robocopyとタスクスケジューラーを連携させて定期的なコピーを実行し、バックアップを取る方法をご紹介します。

コマンドのbat化

  1. テキストにコマンドを書いて保存する
    robocopy <コピー元> <コピー先> /s /e /r:0 /w:0 /XJD /np /z /log:<ログ保存先>	

  2. 拡張子をbatに変換する

タスクスケジューラーの登録

  1. タスクスケジューラーを開き、「タスクの作成」を選択する

  2. 全般タブで以下のように設定する

  3. トリガータブで「新規」を選択する

  4. 設定、開始時間、間隔を設定する

  5. 操作タブで「新規」を選択する

  6. 「参照」を選択し、先ほど作成したbatファイルを選択する

  7. 条件タブで新規を選択して以下のように設定する

  8. 設定タブを選択して以下のように設定する

  9. パスワードを入力する

  10. 設定されるとタスクスケジューラーで以下のように表示される

これで、設定したトリガーの時間になると、対象のファイルが自動でコピーされます。

実際にコピーされたことをログファイルで確認できました。

おわりに

本記事では、様々な条件でコピーができるrobocopyコマンドについて紹介しました。

robocopyを使う際の参考となれば幸いです。

執筆担当者プロフィール
髙橋 瞭太

髙橋 瞭太(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部に所属しています。主に、Azureの設計構築を担当しています。

担当記事一覧