1.21 jigowatts

Great Scott!

Robocopyでネットワーク上のファイルをミラーリング!

概要

以前Copyコマンドで実装したバッチがネットワークコピーの際にアレだったようで、Robocopyに切り替えるべきという結論に至ったため、Robocopyをちょいかじりです。

構文

Robocopy コピー元フォルダ コピー先フォルダ [ファイル] [スイッチ オプション]

コピー対象のファイルはデフォルトで全部が対象となっているため省略可能。

ミラーリング

worksフォルダからbackupフォルダへタイムスタンプを保持してミラーリング
ログは追記形式でlogフォルダにcopy.logとして出力。と同時にコンソールにも表示。

>robocopy c:\Users\s\works c:\Users\s\backup /mir /dcopy:t /log+:c:\Users\s\log\copy.log /tee

実行の度に出力されるヘッダがうざいと思って/njhで省略してみたけど、ログ出力時に開始時間がヘッダに含まれているので結局省略できず。

アクセス権も含めコピー

/bと/copyallオプションでアクセス権のないファイルなどすべての情報をコピー。
ただし、ユーザーアカウント制御機能(UAC)による制限があるので、[管理者として実行]でコマンドプロンプトを開始する必要あり。バッチにするには管理者で実行できるようスクリプトをごにょごにょする必要があるのかな。

>robocopy c:\Users\s\works c:\Users\s\backup /mir /dcopy:t /b /copyall

モニタリング

これ面白い!
/mon:3でファイルが3回変更されるか、/mot:3で前回から3分経過のタイミングで自動コピーしてくれる。終了するにはCtrl+C。

>robocopy c:\Users\s\works c:\Users\s\backup /mir /mon:3 /mot:3

ネットワークコピー

/zオプションを付けることでネットワークコピーしてる最中に無線LANのワイヤレススイッチを切って、再度接続してもコピーが自動的に再開されました。
これが再起動可能モードの力か!

>robocopy \\ネットワークドライブのパス c:\Users\t\backup /z /mir

エラーハンドリング

リターンコードは8以上でエラー扱いらしいので細かい制御が不要であればこんな感じで。

if %errorlevel% geq 8 (
    エラー時の処理
)

まとめ

コピーコマンドはCopy、XcopyRobocopyと3種類もありますが、Robocopyはコピーが中断されても途中から再開できるため、ネットワークコピーをする場合便利ですね!

参考

Windows コマンドプロンプト ポケットリファレンス

Windows コマンドプロンプト ポケットリファレンス