Windowsの標準機能"robocopy"で堅牢性の高いバックアップをする

無くなっては困るデータがあるにも関わらず,バックアップが疎かになりがちだ。突然窓が機嫌を損ねて秘蔵ファイルと共に心中されたら困る。
そこでWindowsの標準機能robocopyを使用する。差分コピー機能(所謂同期に近い?)は便利だ,しかもそれがOS標準使えるのはとても安心だ。コマンドライン上で動くため,自分が何をやっているか一目で分かって問題解決も容易である。

バッチファイル

コマンドプロンプトに直に打って実行するのもアリだが,毎回行うのは面倒なので,バッチファイルにすると良い。

バッチファイル本体

echo ==================================================================================================== >> "C:\Users\Shibanyan\Desktop\robocopylog.txt"
echo %date% %time% >> "C:\Users\Shibanyan\Desktop\robocopylog.txt"

set SRCL=C:
echo コピー元ドライブレターは%SRCL%です
set /p DSTL=コピー先ドライブレター等を入力:

set "SRCD=\DTV"
set "DSTD=\DTV"
call :backup
 
set "SRCD=\Users\shibanyan\Desktop"
set "DSTD=\Desktop"
call :backup

set "SRCD=\Users\shibanyan\Documents"
set "DSTD=\Documents"
call :backup

set "SRCD=\Users\shibanyan\Pictures"
set "DSTD=\Pictures"
call :backup

set "SRCD=\Users\shibanyan\Music"
set "DSTD=\Music"
call :backup

rem ここに他のディレクトリ用オブジェクトを追加できる

pause
exit

:backup
robocopy "%SRCL%%SRCD%" "%DSTL%%DSTD%" /MIR /NP /XA:SH /R:3 /W:5 /LOG+:"C:\Users\Shibanyan\Desktop\robocopylog.txt" /XD "C:\DTV\backupandsync" "C:\DTV\ts" /TEE /FFT
exit /b

使い方

上記コマンドをテキストエディタ等にコピペ。
②"robocopyのオプション"の項を参考に,オプションを自分の目的や環境に合わせる。
ディレクトリ名やファイル名を自分の環境に合わせる。set SRCD,set DSTD,call :backupのオブジェクトは幾らでも増やせる(pauseの上)。
④"robocopy.bat以外の名前"で保存する("robocopy.bat"という名前にすると,それをダブルクリックで実行した際,robocopy環境変数よりもカレントディレクトリに存在する自分を起動してしまい,何も起こらなくなってしまうので注意)。
⑤ダブルクリックで実行し,コピー先のドライブレターを入力すると開始される。

robocopyのオプション

コマンドプロンプトrobocopy /?と入力するとオプション一覧と説明が表示される。以下はそれらを表にしたものである。必ず目を通しておいて欲しい。
使用したオプションは太字にしてある。若干説明を付け足しているものもある。

基本構文

ROBOCOPY コピー元 コピー先 [ファイル [ファイル]...] [オプション]

"コピー元","コピー先"に指定するのはドライブ:\パスまたは\\サーバー\共有\パス
"ファイル"に指定するのはコピーするファイル(名前/ワイルドカード: 既定値は「*.*」です)

コピー オプション

オプション 説明
/S サブディレクトリをコピーしますが、空のディレクトリはコピーしません。
/E 空のディレクトリを含むサブディレクトリをコピーします。
/LEV:n コピー元ディレクトリ ツリーの上位 n レベルのみをコピーします。
/Z 再起動可能モードでファイルをコピーします。
/B バックアップ モードでファイルをコピーします。
/ZB 再起動可能モードを使用します。アクセスが拒否された場合、バックアップ モードを使用します。
/J バッファーなし I/O を使用してコピーします (大きなファイルで推奨)。
/EFSRAW 暗号化されたすべてのファイルを EFS RAW モードでコピーします。
/COPY:コピーフラグ ファイルにコピーする情報 (既定値は /COPY:DAT)。(コピーフラグ: D= データ、A= 属性、T= タイムスタンプ,(S= セキュリティ =NTFS ACL、O= 所有者情報、U= 監査情報)
/SEC セキュリティと共にファイルをコピーします (/COPY:DATS と同等)。
/COPYALL ファイル情報をすべてコピーします (/COPY:DATSOU と同等)。
/NOCOPY ファイル情報をコピーしません (/PURGE と共に使用すると便利)。
/SECFIX スキップしたファイルも含むすべてのファイルのファイル セキュリティを修正します。
/TIMFIX スキップしたファイルも含むすべてのファイルのファイル時刻を修正します。
/PURGE 既にコピー元に存在しないコピー先のファイル/ディレクトリを削除します。
/MIR ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)。差分コピー:変化のないファイルをコピーしないので済むので大幅な時間短縮ができる。同期に近い?
/MOV ファイルを移動します (コピー後にコピー元から削除)。
/MOVE ファイルとディレクトリを移動します (コピー後にコピー元から削除)。
/A+:[RASHCNET] コピーされたファイルに指定の属性を追加します。
/A-:[RASHCNET] コピーされたファイルから指定の属性を削除します。
/CREATE ディレクトリ ツリーと長さ 0 のファイルのみを作成します。
/FAT 8.3 FAT ファイル名のみを使用してコピー先ファイルを作成します。
/256 256 文字を超える非常に長いパスのサポートをオフにします。
/MON:n コピー元を監視し、n 回を超える変更があった場合に再度実行します。
/MOT:m コピー元を監視し、m 分後に変更があった場合に再度実行します。
/RH:hhmm-hhmm 実行時間 - 新しいコピーを開始できる時刻です。
/PF 実行時間をファイルごと (パスごとではない) に確認します。
/IPG:n 低速回線で帯域幅を解放するためのパケット間ギャップ (ミリ秒)。
/SL 対象ではなくシンボリック リンクをコピーします。
/MT[:n] n 個のスレッドのマルチスレッド コピーを実行します(既定値 8)。n は 1 から 128 までの値である必要があります。このオプションは、/IPG および /EFSRAW オプションと互換性がありません。パフォーマンスの向上のため、/LOG オプションを使用して出力をリダイレクトします。
/DCOPY:コピーフラグ ディレクトリにコピーする情報 (既定値は /DCOPY:DA)。(コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
/NODCOPY ディレクトリ情報をコピーしません (既定では /DCOPY:DA が実行されます)。
/NOOFFLOAD Windows のオフロードをコピーするメカニズムを使用せずに、ファイルをコピーします。

ファイル選択オプション

オプション 説明
/A アーカイブ属性が設定されているファイルのみをコピーします。
/M アーカイブ属性のあるファイルのみをコピーし、リセットします。
/IA:[RASHCNETO] 指定されたいずれかの属性が設定されているファイルのみを含みます。
/XA:[RASHCNETO] 指定されたいずれかの属性が設定されているファイルを除外します。(R:読み取り専用,A:アーカイブ,S:システム,H:隠しファイル,N:空ファイル,T:一時ファイル,C:圧縮,N:検索用インデックスなし,E:暗号化,O:オフライン)。隠しファイルやシステムファイルのような管理者権限が必要になってしまうファイルがバックアップ対象にある場合は指定する。
/XF file [ファイル]... 指定された名前/パス/ワイルドカードに一致するファイルを除外します。バックアップ対象から除外するファイルパスを指定。
/XD dir [ディレクトリ]... 指定された名前/パスに一致するディレクトリを除外します。バックアップ対象から除外するフォルダパスを指定。
/XC 変更されたファイルを除外します。
/XN 新しいファイルを除外します。
/XO 古いファイルを除外します。
/XX コピー先にだけ存在するファイルとディレクトリを除外します。
/XL コピー元にだけ存在するファイルとディレクトリを除外します。
/IS 同一ファイルを含みます。
/IT 異常なファイルを含めます。
/MAX:n 最大ファイル サイズ - n バイトより大きいファイルを除外します。
/MIN:n 最小ファイル サイズ - n バイトより小さいファイルを除外します。
/MAXAGE:n 最長ファイル有効期間 - n 日より古いファイルを除外します。
/MINAGE:n 最短ファイル有効期間 - n 日より新しいファイルを除外します。
/MAXLAD:n 最大最終アクセス日 - n で指定する値以後に使用していないファイルを除外します。
/MINLAD:n 最小最終アクセス日 - n で指定する値以後に使用されたファイルを除外します。(n < 1900 の場合、n = n 日です。それ以外は、n = YYYYMMDDの日付です)。
/XJ 接合ポイントを除外します (通常、既定で含まれます)。
/FFT FAT ファイル時間 (2 秒の粒度) を仮定します。NASのタイムラグでタイムスタンプがズレた時無限ループにならないために指定。
/DST 1 時間の DST 時間差を補正します。
/XJD ディレクトリの接合ポイントを除外します。
/XJF ファイルの接合ポイントを除外します。

再試行オプション

オプション 説明
/R:n 失敗したコピーに対する再試行数: 既定値は 1,000,000。 5000兆回リトライして欲しい! って方は/R:5000000000000000を指定する。
/W:n 再試行と再試行の間の待機時間: 既定値は、30 秒です。
/REG /既定の設定としてレジストリに R:n と /W:n を保存します。
/TBD 共有名が定義されるのを待ちます (再試行エラー 67)。

ログ オプション

オプション 説明
/L リストのみ - いずれのファイルにも、コピー、タイムスタンプの追加、または削除を実施しません。
/X 選択されたファイルのみではなく、余分なファイルをすべて報告します。
/V スキップされたファイルを示す詳細出力を作成します。
/TS 出力にコピー元ファイルのタイム スタンプを含めます。
/FP 出力にファイルの完全なパス名を含めます。
/BYTES サイズをバイトで出力します。
/NS サイズなし - ファイル サイズをログに記録しません。
/NC クラスなし - ファイル クラスをログに記録しません。
/NFL ファイル リストなし - ファイル名をログに記録しません。
/NDL ディレクトリなし - ディレクトリ名をログに記録しません。
/NP 進行状況なし - コピーの完了率を表示しません。これを指定しないとコマンドプロンプトの表示やログファイルが見にくくなる。
/ETA コピーするファイルの推定完了時刻を表示します。
/LOG:ファイル ログ ファイルに状態を出力します (既存のログを上書きします)。
/LOG+:ファイル ログ ファイルに状態を出力します (既存のログ ファイルに追加します)。
/UNILOG:ファイル ログ ファイルに UNICODE で状態を出力します (既存のログを上書きします)。
/UNILOG+:ファイル ログ ファイルに UNICODE で状態を出力します (既存のログに追加します)。
/TEE コンソール ウィンドウとログ ファイルに出力します。/LOGを使用する際echo off状態になってしまい動いているのか不安になるので指定。
/NJH ジョブ ヘッダーがありません。
/NJS ジョブ要約がありません。
/UNICODE 状態を UNICODE で出力します。

ジョブ オプション

オプション 説明
/JOB:ジョブ名 名前の付いたジョブ ファイルからパラメーターを取得します。
/SAVE:ジョブ名 名前の付いたジョブ ファイルにパラメーターを保存します。
/QUIT コマンド ラインの処理後に終了します (パラメーターの表示のため)。
/NOSD コピー元ディレクトリを指定しません。
/NODD コピー先ディレクトリを指定しません。
/IF 後続のファイルを含みます。

注釈

ボリュームのルート ディレクトリで /PURGE または /MIR を使用すると、robocopy は、要求した操作を System Volume Information 内のファイルにも適用します。この動作が意図したものでない場合は、/XD スイッチを使用して、そのディレクトリをスキップするようにrobocopy に指示することができます。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス