データロストを恐れて、さらにもう1つUSBハードディスクを買って、気が向いたら手動でUSBハードディスク間のコピーを実施する運用にしているが、その際に、手作業でコピーするのは面倒なので、Windows標準で使えるrobocopyコマンドを使ってスクリプトを作っておくことにした。
スクリプト内容
先にスクリプトの中身を見せてしまうと、以下のようになる。極めてシンプルだが、差分コピーでコピー元(SRC)とコピー先(DST)をミラーリングできるスグレモノ。タイムスタンプもディレクトリ含めてきちんと一致してコピーされる。-------------------ここから
@echo off
set SRC=d:\
set DST=z:\
echo %SRC%→%DST%のミラーリングを開始します。
pause
set TODAY=%DATE:/=%
robocopy %SRC% %DST% /MIR /DCOPY:T /R:1 /W:5 /XD "System Volume Information" "$RECYCLE.BIN" > d:\copy_%TODAY%.log
echo %SRC%→%DST%のミラーリングが終了しました。
pause
exit 0
-------------------ここまで
スクリプトのログ
これを実行すると、以下のようなログが出力される(以下ログは表示用に少し整形済み)。2回目以降は差分コピーなので、変更が少なければかなり短い時間でコピーは終わる。ログの最後には、結果のサマリが表示され、ファイル数・スキップ数(同一ファイルが存在)・失敗数(何らかの理由でコピー失敗)などが確認できる。
-------------------ここから
------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
------------------------------------------------------------
コピー元 : d:\
コピー先 : z:\
ファイル: *.*
除外ディレクトリ: System Volume Information
$RECYCLE.BIN
オプション: *.* /S /E /COPY:DAT /DCOPY:T /PURGE /MIR /R:1 /W:5
------------------------------------------------------------
3 d:\
新しいファイル 338 copy - コピー.bat 0% 100%
より新しい 299 copy.bat 0% 100%
より新しい 0 copy_20150607.log 0% 100%
… (中略) …
2 d:\temp\
------------------------------------------------------------
ディレクトリ: 3198 0 3198 0 0 0
ファイル: 83816 3 83813 0 0 0
バイト: 532.962 g 637 532.962 g 0 0 0
時刻: 0:00:03 0:00:01 0:00:00 0:00:02
速度: 619 バイト/秒
速度: 0.035 MB/分
終了: Sun Jun 07 17:31:39 2015
-------------------ここまで
robocopyの説明
robocopyコマンドはオプションが多数存在するが、今回使用しているコマンドのオプションについて簡単に説明する。
◆コマンド
robocopy %SRC% %DST% /MIR /DCOPY:T /R:1 /W:5 /XD "System Volume Information" "$RECYCLE.BIN" > d:\copy_%TODAY%.log
◆使用オプション
/MIR : MIRRORの意味。全てのファイルのコピーと削除を行いディスクの内容を同一にする
/DCOPY:T : ディレクトリのタイムスタンプのコピー
/R:1 : Retry回数。省略すると100万回繰り返すので必ず指定することを推奨
/W:5 : リトライ時にWaitする時間。省略すると30秒
/XD : eXclude Directoryの略と思われる。コピー除外フォルダを指定する。
参考URL
Robocopyhttps://technet.microsoft.com/ja-jp/library/cc733145%28v=ws.10%29.aspx
0 件のコメント:
コメントを投稿