本記事では、フォルダやファイルをコピー、同期するときに役立つ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化
- テキストにコマンドを書いて保存する
robocopy <コピー元> <コピー先> /s /e /r:0 /w:0 /XJD /np /z /log:<ログ保存先>
- 拡張子をbatに変換する
タスクスケジューラーの登録
- タスクスケジューラーを開き、「タスクの作成」を選択する
- 全般タブで以下のように設定する
- トリガータブで「新規」を選択する
- 設定、開始時間、間隔を設定する
- 操作タブで「新規」を選択する
- 「参照」を選択し、先ほど作成したbatファイルを選択する
- 条件タブで新規を選択して以下のように設定する
- 設定タブを選択して以下のように設定する
- パスワードを入力する
- 設定されるとタスクスケジューラーで以下のように表示される
これで、設定したトリガーの時間になると、対象のファイルが自動でコピーされます。
実際にコピーされたことをログファイルで確認できました。
おわりに
本記事では、様々な条件でコピーができるrobocopyコマンドについて紹介しました。
robocopyを使う際の参考となれば幸いです。