こんにちは!今回は私自身業務でよく利用する「バックアップ」にフォーカスを当て、バックアップかつ世代管理できるバッチを作成しました。
ご参考になれば幸いです。
バックアップのイメージ
まずはバックアップ処理のイメージです。
・C>TESTフォルダを定期的にバックアップします。
・C>TEST_BACKフォルダには以下の3つのフォルダを用意します。
①バックアップ格納場所:バックアップフォルダ(N世代分)を保存します。
②バッチ置き場:今回の処理を記述したバッチを置きます。
③ログファイル置き場:ログ情報を出力します。
・BACKの中身
世代ごとに分かれていて、ファイル命名規則は「bk_yyyymmddhhmmss」となっています。
・BATの中身
main.batのみ置いています。
・LOGの中身
.logファイルにログを書き込みます。
以下のように記録されます。
バッチ
作成したバッチは以下の通りです。
rem ------------------------------------------------------------
rem N世代をバックアップしたい場合のバッチ
rem ------------------------------------------------------------
set log=C:\TEST_BACK\LOG\bklog.log
rem 改行
echo. >>%log%
rem 日付の追記
echo %date% %time% :バッチ処理を開始 >>%log%
rem ------------------------------------------------------------
rem 時間取得(yyyymmddhhmmssを生成)
rem ------------------------------------------------------------
set time_tmp=%time: =0%
set now=%date:/=%%time_tmp:~0,2%%time_tmp:~3,2%%time_tmp:~6,2%
rem ------------------------------------------------------------
rem バックアップ処理
rem ------------------------------------------------------------
if not %ERRORLEVEL% == 0 (
echo %date% %time% :初期化で失敗しました >> %log%
) else (
echo %date% %time% :バックアップ処理を開始 >> %log%
rem ***************************************
rem ↓↓↓ここにバックアップ処理を書く↓↓↓
echo D | xcopy /e C:\TEST C:\TEST_BACK\BACK\bk_%now%
rem ↑↑↑ここにバックアップ処理を書く↑↑↑
rem ***************************************
)
rem ------------------------------------------------------------
rem 一番古いファイルの削除(5世代分を残す)
rem del:ファイル削除 / del:フォルダ削除
rem ------------------------------------------------------------
if not %ERRORLEVEL% == 0 (
echo %date% %time% :バックアップ処理で失敗しました >> %log%
) else (
echo %date% %time% :世代管理処理を開始 >> %log%
for /f "skip=5" %%B in ('dir /b /o-d C:\TEST_BACK\BACK\bk_*') do rd /s /q C:\TEST_BACK\BACK\%%B
)
rem ------------------------------------------------------------
rem 終了処理
rem ------------------------------------------------------------
if not %ERRORLEVEL% == 0 (
echo %date% %time% :世代管理処理で失敗しました >> %log%
) else (
echo %date% %time% :処理終了 >> %log%
EXIT
)
補足①:xcopy
・フォルダのコピーを行うため、「xcopy」を用いました。
echo Dとすることで、「ファイル:F or フォルダ:D」の警告画面をスキップすることができます。
echo D | xcopy /e C:\TEST C:\TEST_BACK\BACK\bk_%now%
補足②:世代管理
・世代管理処理は「for」文を用います。
skip=5とすれば5世代まで管理します。
保存期間の古いものから削除するために、「dir /b /o-d」としています。
「rd」でフォルダを削除しますが、「/s /q」で強制的にフォルダ内のファイル・フォルダも削除します。
for /f "skip=5" %%B in ('dir /b /o-d C:\TEST_BACK\BACK\bk_*') do rd /s /q C:\TEST_BACK\BACK\%%B
以上です。