今回は、自分のメインPCにて使用している、自作ROBOCOPYバッチを紹介します。
○01.自作ROBOCOPYバッチの公開
以下のダウンロードリンクよりダウンロードできます。
robocopy-batch_201105
ZIP圧縮してありますので、解凍した後、「Readme.txt」を見て、ご利用下さい。
ダウンロードしたそのままでは使用できない(私のPC環境に合わせてある)ので、
ダウンロードファイルを、ご自身のPC環境に合わせてカスタマイズ後、
拡張子を、「*.bat」に変更すれば完成です。
実行する時は管理者権限(右クリック「管理者として実行」)で実行して下さい。
当ROBOCOPYバッチには、誤実行防止機能があり、誤ってダブルクリックしても、
"quit"とタイプしてENTERすれば何もしないで終了できます。
なお、コピー元とコピー先を逆にすると、データ消失等の悲劇が起きるので、カスタマイズ後の試運転の際には、
十分に確認して、念のために別の手段でバックアップをとってから行うといいと思います。
○02.自作ROBOCOPYバッチの解説
ダウンロード・解凍したファイルのうち、
・01_E_MAIN-DATA_for-Win7.bat(解凍直後は、*.txt)
自作ROBOCOPYバッチ(同一PC別ドライブにミラーリングコピー:Win7用)
について、解説をしますので、カスタマイズの際の参考にして下さい。
なお、ROBOCOPYについての参考情報として、下記のサイトがあります。
ROBOCOPY の使用法詳細(Windows Server のコマンドラインリファレンス)
ROBOCOPY の機能追加(Windows 7版)
では、解説を始めます。
○02-01.自作ROBOCOPYバッチのソースコード全文
01行目: :開始 02行目: 03行目: @echo off 04行目: 05行目: set Name=01_E_MAIN-DATA 06行目: set Source_directory=E: 07行目: set Destination_directory=Y:\Robocopy-Backup 08行目: set Log_directory=Y:\Robocopy-Backup\LOG 09行目: 10行目: set YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2% 11行目: set Time_edit=%time: =0% 12行目: set HHMMSS=%Time_edit:~0,2%%Time_edit:~3,2%%Time_edit:~6,2% 13行目: 14行目: set Copy_options=/ZB /DCOPY:T /COPYALL /MIR /A-:SH /MT:8 15行目: 16行目: set Excludes_files="desktop.ini" "Thumbs.db" 17行目: set Excludes_directories="$RECYCLE.BIN" "RECYCLER" "System Volume Information" 18行目: set File_selection_options=/XF %Excludes_files% /XD %Excludes_directories% 19行目: 20行目: set Retry_options=/R:1 /W:1 21行目: 22行目: set Log_file="%Log_directory%\%Name%_%YYYYMMDD%_%HHMMSS%.log" 23行目: 24行目: set Logging_options=/NFL /NDL /NP /TEE /LOG:%Log_file% 25行目: 26行目: set Source="%Source_directory%" 27行目: set Destination="%Destination_directory%\%Name%" 28行目: set File=*.* 29行目: set Options=%Copy_options% %File_selection_options% %Retry_options% %Logging_options% 30行目: 31行目: :: 自動生成した、ROBOCOPY実行コマンドを画面表示で確認する 32行目: echo. 33行目: echo ↓↓↓↓↓ 自動生成した、ROBOCOPY実行コマンド ここから ↓↓↓↓↓ 34行目: echo. 35行目: echo robocopy.exe %Source% %Destination% %File% %Options% 36行目: echo. 37行目: echo ↑↑↑↑↑ 自動生成した、ROBOCOPY実行コマンド ここまで ↑↑↑↑↑ 38行目: 39行目: set Console_input="" 40行目: 41行目: echo. 42行目: echo ****************************************************************************** 43行目: echo * * 44行目: echo * 重要!! バッチ処理実行確認 * 45行目: echo * * 46行目: echo * 自動生成した、ROBOCOPY実行コマンドを確認し、処理続行選択について、 * 47行目: echo * 以下のように入力してください(大文字と小文字は区別しません)。 * 48行目: echo * * 49行目: echo * start :ROBOCOPYの実行を開始します * 50行目: echo * quit :ROBOCOPYの実行を中止し、当バッチ処理を打ち切ります * 51行目: echo * 上記以外の文字列 :当バッチ処理の先頭に戻ります * 52行目: echo * (ログファイル名の日時も更新されます) * 53行目: echo * * 54行目: echo ****************************************************************************** 55行目: echo. 56行目: 57行目: set /P Console_input="処理続行選択(上記参照) : " 58行目: 59行目: if /I "%Console_input%"=="quit" exit 60行目: if /I "%Console_input%"=="start" goto ROBOCOPY実行 61行目: goto 開始 62行目: 63行目: pause 64行目: 65行目: :ROBOCOPY実行 66行目: robocopy.exe %Source% %Destination% %File% %Options% 67行目: 68行目: pause 69行目: exit
○02-02.カスタマイズ必須項目
05行目: set Name=01_E_MAIN-DATA
変数"Name"は、複数のROBOCOPYバッチを運用することを想定した項目で、
自分が分かり易いように名前を付ければよい。
下記(07行目)変数"Destination_directory"配下、
設定した名前のディレクトリーにバックアップされ、ログファイル名の一部にもなる。
06行目: set Source_directory=E:
変数"Source_directory"に、バックアップ元ディレクトリーを設定する。
07行目: set Destination_directory=Y:\Robocopy-Backup
変数"Destination_directory"に、バックアップ先ディレクトリーを設定する。
ここに、上記(05行目)変数"Name"の名前のディレクトリーが作成されてバックアップされる。
08行目: set Log_directory=Y:\Robocopy-Backup\LOG
変数"Log_directory"に、ログファイル作成ディレクトリーを設定する。
○02-03.バックアップ元設定
06行目: set Source_directory=E: 26行目: set Source="%Source_directory%"
26行目で、06行目(カスタマイズ必須項目)のバックアップ元ディレクトリーを
変数"Source"(ROBOCOPYに指定するバックアップ元のフルパス)に設定する。
○02-04.バックアップ先設定
05行目: set Name=01_E_MAIN-DATA 07行目: set Destination_directory=Y:\Robocopy-Backup 27行目: set Destination="%Destination_directory%\%Name%"
27行目で、05行目(カスタマイズ必須項目)の名前と
07行目(カスタマイズ必須項目)のバックアップ先ディレクトリーを連結して、
変数"Destination"(ROBOCOPYに指定するバックアップ先のフルパス)に設定する。
○02-05.コピーオプション設定
14行目: set Copy_options=/ZB /DCOPY:T /COPYALL /MIR /A-:SH /MT:8
14行目の変数"Copy_options"(コピーオプション)に設定している項目の詳細は以下の通り。
/ZB
再開可能モードでコピーを試みて、失敗した場合は、バックアップモードでコピー
/DCOPY:T
ディレクトリータイムスタンプもコピー
/COPYALL
ファイル情報を全てコピー
/COPY:DATSOU と同じ
※D= データ、A= 属性、T= タイムスタンプ、S= セキュリティー =NTFS ACL、O= 所有者情報、U= 監査情報
※当オプションを指定しない場合の規定値は"/COPY:DAT"
/MIR
ミラーリングコピー
/E(空のものを含めたサブディレクトリーもコピーする) 、および、/PURGE(コピー元に無いものをコピー先から削除) と同じ
/A-:SH
ドライブ直下をコピーすると、コピー先の最上位ディレクトリーに、システム属性と隠し属性が付加されてしまうため、
コピー先からシステム属性と隠し属性を外す指定を行うもの。
/MT:8
8スレッドのマルチスレッドコピー。既定値が8で、1~128が設定可能
○02-06.ファイル・ディレクトリー選択オプション設定
16行目: set Excludes_files="desktop.ini" "Thumbs.db"
16行目で、以下のコピー除外ファイルを設定。
・"desktop.ini"
・"Thumbs.db"
17行目: set Excludes_directories="$RECYCLE.BIN" "RECYCLER" "System Volume Information"
17行目で、以下のコピー除外ディレクトリーを設定。
・"$RECYCLE.BIN"
・"RECYCLER"
・"System Volume Information"
18行目: set File_selection_options=/XF %Excludes_files% /XD %Excludes_directories%
18行目で、/XF オプションにてコピー除外ファイル(16行目)を指定して、
/XD オプションにてコピー除外ディレクトリー(17行目)を指定して、
変数"File_selection_options"(ファイル・ディレクトリー選択オプション)に設定する。
○02-07.リトライオプション設定
20行目: set Retry_options=/R:1 /W:1
20行目の変数"Retry_options"(リトライオプション)に設定している項目の詳細は以下の通り。
/R:1
コピー失敗時のリトライ回数
/W:1
コピー失敗時のリトライ間隔(単位:秒)
○02-08.ログオプション設定
10行目: set YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2% 11行目: set Time_edit=%time: =0% 12行目: set HHMMSS=%Time_edit:~0,2%%Time_edit:~3,2%%Time_edit:~6,2%
10行目~12行目で現在の日付・時間を取得する。
05行目: set Name=01_E_MAIN-DATA 08行目: set Log_directory=Y:\Robocopy-Backup\LOG 22行目: set Log_file="%Log_directory%\%Name%_%YYYYMMDD%_%HHMMSS%.log"
22行目で、05行目(カスタマイズ必須項目)の名前と、
08行目(カスタマイズ必須項目)のログファイル作成ディレクトリーと、
10行目~12行目で取得した現在の日付・時間を連結して、
変数"Log_file"(ROBOCOPYに指定するログファイル名のフルパス)に設定する。
24行目: set Logging_options=/NFL /NDL /NP /TEE /LOG:%Log_file%
24行目で他のログ系パラメーターと連結して、
変数"Logging_options"(ログオプション)に設定する。
○02-09.各種オプションを連結して、全オプション内容が完成
29行目: set Options=%Copy_options% %File_selection_options% %Retry_options% %Logging_options%
29行目で、前段階で準備しておいた以下の各種オプション内容を連結して、
・コピーオプション(変数"Copy_options")
・ファイル・ディレクトリー選択オプション(変数"File_selection_options")
・リトライオプション(変数"Retry_options")
・ログオプション(変数"Logging_options")
変数"Options"(ROBOCOPYに指定する全オプション内容)に設定する。
○02-10.ROBOCOPYのコマンド内容が完成
26行目: set Source="%Source_directory%" 27行目: set Destination="%Destination_directory%\%Name%" 28行目: set File=*.* 29行目: set Options=%Copy_options% %File_selection_options% %Retry_options% %Logging_options%
ここまでで、ROBOCOPYを実行するためのパラメーターが全て揃うことになる。
※26行目、27行目、29行目については、前段階の説明を参照。
35行目: echo robocopy.exe %Source% %Destination% %File% %Options% 66行目: robocopy.exe %Source% %Destination% %File% %Options%
35行目でコンソール表示(コマンド内容確認)、66行目で実行時パラメーターとして使用される。
○02-11.コマンドパラメーター内容確認表示、処理実行確認、処理実行
31行目: :: 自動生成した、ROBOCOPY実行コマンドを画面表示で確認する 32行目: echo. 33行目: echo ↓↓↓↓↓ 自動生成した、ROBOCOPY実行コマンド ここから ↓↓↓↓↓ 34行目: echo. 35行目: echo robocopy.exe %Source% %Destination% %File% %Options% 36行目: echo. 37行目: echo ↑↑↑↑↑ 自動生成した、ROBOCOPY実行コマンド ここまで ↑↑↑↑↑ 38行目: 39行目: set Console_input="" 40行目: 41行目: echo. 42行目: echo ****************************************************************************** 43行目: echo * * 44行目: echo * 重要!! バッチ処理実行確認 * 45行目: echo * * 46行目: echo * 自動生成した、ROBOCOPY実行コマンドを確認し、処理続行選択について、 * 47行目: echo * 以下のように入力してください(大文字と小文字は区別しません)。 * 48行目: echo * * 49行目: echo * start :ROBOCOPYの実行を開始します * 50行目: echo * quit :ROBOCOPYの実行を中止し、当バッチ処理を打ち切ります * 51行目: echo * 上記以外の文字列 :当バッチ処理の先頭に戻ります * 52行目: echo * (ログファイル名の日時も更新されます) * 53行目: echo * * 54行目: echo ****************************************************************************** 55行目: echo. 56行目: 57行目: set /P Console_input="処理続行選択(上記参照) : " 58行目: 59行目: if /I "%Console_input%"=="quit" exit 60行目: if /I "%Console_input%"=="start" goto ROBOCOPY実行 61行目: goto 開始 62行目: 63行目: pause 64行目: 65行目: :ROBOCOPY実行 66行目: robocopy.exe %Source% %Destination% %File% %Options% 67行目: 68行目: pause 69行目: exit
誤ってダブルクリックしてROBOCOPYバッチが起動されたり、コマンド内容が誤ったまま
実行されるのを防ぐために、ROBOCOPYコマンドを実行する前に、
31行目~37行目にて、コマンド内容をユーザーに確認させて、
ユーザーに処理続行の意思を確認する。
"start"とタイプしてENTERすると、66行目にてROBOCOPYコマンドを実行する。
"quit"とタイプしてENTERすると、59行目にて当ROBOCOPYバッチを打ち切って終了する。
その他の文字列をタイプすると、61行目にて当ROBOCOPYバッチの先頭に戻る。
なお、処理の流れ上、63行目のpauseは通らないはずだが、念のために挿入。
○02-12."自作ROBOCOPYバッチ(同一PC別ドライブにミラーリングコピー:Vista用)"との差分
14行目の"/MT:8"オプションについて、Windows7版のROBOCOPYより追加された機能のため、
Vista用からは除外。
○02-13."自作ROBOCOPYバッチ(別PCにLAN経由ミラーリングコピー:Win7用)"との差分
バックアップ先ディレクトリーとログファイル作成ディレクトリーが異なる以外に、
14行目"/COPYALL"オプションについて、別PCにコピーする際には、
セキュリティーや所有者情報や監査情報は邪魔なような気がしたので、
規定値のコピーオプションの"/COPY:DAT"に変更。
以上、解説はここまでです。