LoginSignup
2
4

More than 3 years have passed since last update.

robocopyのミラーリング用テンプレート

Posted at

前置き

ミラーリングに robocopy コマンドが便利ですが、多機能なので毎回ヘルプ見てオプション組み立てるのめんどくさいので、ミラーリングに特化したテンプレートです。
なお、Windowsなので、バッチファイルは 文字コード:Shift-JIS、改行コード:CRLF で保存しておかないと動かない可能性ありです。
また、ミラーリングは間違うと危険な操作なので、仮環境で試してから使ってください。責任は取れません。
いずれも、/NPと/LOG+ によって、画面に出さず(&ファイル数多いと高速化)、ログを出力するようにしています。
ログは、デスクトップに出力されます。また、ファイル名の末尾に現在時刻の「分」が付与されます。

また・・・ set /p を使うやり方だと、ドライブ直下と半角スペース混じりパスを混在させて指定すると、うまく行きませんでした。
(ダブルクォーテーションでエスケープしたり色々試したんですが、うまく行かず。諦めて注意を表示する事にしました。)

うまく行かない指定例.
コピー元:C:\
コピー先:C:\F older

なお、pause で止まっているのをキャンセルするには、ウィンドウを閉じれば良いです。コマンドラインから実行しているなら、Ctrl+C (→ y → Enter)。

ミラーリング (コマンド事前確認&実行)

コピー元、コピー先を入力すると、/QUIT により解釈結果を確認し、続けて何かキーを押すとミラーリング実行するバッチファイル。

mirror_verify_and_run.bat
@echo off
set MIR_SRC=
set MIR_DEST=
echo コピー元と先を入力します(ドライブ直下を""付きで指定しないこと)
set /P MIR_SRC="コピー元: "
set /P MIR_DEST="コピー先: "
robocopy "%MIR_SRC%" "%MIR_DEST%" /DCOPY:DAT /NP /MIR /FFT /R:3 /W:3 /QUIT
echo.
echo これで良ければ実行します
pause
robocopy "%MIR_SRC%" "%MIR_DEST%" /DCOPY:DAT /NP /MIR /FFT /R:3 /W:3 /LOG+:"%USERPROFILE%\Desktop\ミラーリング%time:~3,2%.txt"

ミラーリング (事前シミュレーション実行&実行)

手作業で管理していると、コピー元に保存したつもりが、間違えてコピー先に保存していて、ミラーリングすると消えちゃった!という不幸を起こすことがあります。
/L により、それを予防するため一旦シミュレーション実行し、ログを出力します。その後、実行確認を出します(この時、手動でログを確認し、EXTRA辺りでファイル内を検索して、消しちゃいけないファイルが無いか確認する)。良ければ続けて何かキーを押すと実際にミラーリングを実行します。

mirror_simulation_and_run.bat
@echo off
set MIR_SRC=
set MIR_DEST=
echo コピープレビューを行います(ドライブ直下を""付きで指定しないこと)
set /P MIR_SRC="コピー元: "
set /P MIR_DEST="コピー先: "
echo.
echo プレビュー中...
robocopy "%MIR_SRC%" "%MIR_DEST%" /DCOPY:DAT /NP /MIR /FFT /R:3 /W:3 /L /LOG+:"%USERPROFILE%\Desktop\シミュレーション%time:~3,2%.txt"
echo.
echo 良ければコピーします
pause
robocopy "%MIR_SRC%" "%MIR_DEST%" /DCOPY:DAT /NP /MIR /FFT /R:3 /W:3 /LOG+:"%USERPROFILE%\Desktop\ミラーリング%time:~3,2%.txt"

オプション解説

/L と /QUIT の違い。/QUIT はミラーリング処理を全く行わずコマンドがどう解釈したのかを表示するだけ。/L はミラーリング処理に入るが、実際のファイル操作は行わず、あたかも処理を行ったかのように表示するシミュレーション実行。

/DCOPY:DAT

デフォルトでは、フォルダのタイムスタンプがコピーされないため指定(ファイルはデフォルトでDAT)

/FFT

ファイルシステムが FAT 系の場合、タイムスタンプが最大2秒ほどずれることがあり、更新してないのにコピーされる問題への対処(タイムスタンプのずれ2秒以内は許容し、更新したとみなさない)。
FATを使わない場合、このオプションはオフにする方が更新検出が精密になります。

/MIR

ミラーリングします(/E /PURGE と同義)

/R:3 /W:3

デフォルトでは、リトライ回数多すぎ、タイムアウト長すぎるので、適切に変更。
すごく回線環境悪い場合は、調整した方がいいかもしれません。

/L

実際にはファイル処理を実行せず、リスト表示のみ行う(あたかも実行したように表示する、シミュレーション実行)

/NP

「コピー中 ○○%」を表示しない。ログ出力ありの場合、大きなファイルをコピーするとこの進捗%で埋め尽くされる事に対応。処理速度も向上。

/LOG+

ログ出力(「+」有りなので追記モード)

/QUIT

ミラーリング処理を実行せず、robocopy コマンドがどう解釈したかのみを表示。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4