おはこんばんちは!ゆるふわSEの「ちょここ」です(*´ω`*)
明日から使える?かもしれないソースを紹介していく明日使シリーズ!!!
バックアップの第二弾は日付入りバックアップフォルダの作成、そしてバックアップ時のログファイル作成、さらにたまっていく過去ログの削除機能もついているちょっぴりですが業務用に使えるかも?!なバッチのご紹介でーす♪
作成方法もそんなに難しくないですよ☆彡
では早速、紹介していくよ!
テーマ☆彡
日次でバックアップをとるにしても、いつのバックアップか分かるようにフォルダ名にバックアップ日とかつけたいなぁ。あと、ちゃんとバックアップできたかどうかのログファイルも欲しいし、それでいてログファイルがどんどんたまっていくのは嫌だから古いログの削除機能も欲しーなぁ・・・(´・ω・`)
よっしゃ、バッチ作るお(*´▽`*)
使い方、処理内容☆彡
バッチファイルを実行すると、コピー先に指定したフォルダ内にバックアップ日付を付けたフォルダ(例:2017-07-30_backup)を作成、その中にバックアップ元ファイルを丸ごと自動コピー(ミラーリング)します。
また、指定したログファイル格納フォルダに日付を付けたログファイル(例:2017-07-30_backup.log)を作り、ついでに過去30日を過ぎた過去ログについては削除します。(*´▽`*)
そーすこーど☆彡
@echo off
rem+-------------------------------------------
rem 作成日:
rem 作成者:
rem 更新日:
rem 更新者:
rem 処理内容:
rem+-------------------------------------------
rem 変数の設定
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set filename=%yyyy%-%mm%-%dd%_backup
rem バッチファイルのあるフォルダ(カレントディレクトリ)に移動
pushd %0..
rem コマンドプロンプト画面をクリア
cls
echo robocopyによるバックアップ処理を実行します。
robocopy "C:\backup_from" "D:\backup_to\%filename%" /MIR /R:0 /W:0 /LOG:"D:\log\%filename%.log" /NP /NDL /TEE /XJD /XJF
echo robocopyによるバックアップ処理を実行しました。
echo 30日以上前の過去ログ削除を実行します。
forfiles /p D:\log /d -30 /c "cmd /c del @file"
echo 30日以上前の過去ログ削除を実行しました。
pause
exit
解説☆彡
ひな形以外の部分(赤字)を解説していくよー(*´ω`*)
①日付の変数設定
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
⇒yyyyに実行したときの年(例:2017)、mmに月(例:07)、dd(例:30)に日が入るようにしています。
※下記参考リンクです。
②ファイル名の変数設定
set filename=%yyyy%-%mm%-%dd%_backup
⇒ファイル名をyyyy-mm-dd_backup(例:2017-07-30_backup)で作成できるようにしています。
③バックアップ処理
robocopy "C:\backup_from" "D:\backup_to\%filename%" /MIR /R:0 /W:0 /LOG:"D:\log\%filename%.log" /NP /NDL /TEE /XJD /XJF
⇒「robocopy」コマンドによりコピー元フォルダ(C:\backup_from)の中身をコピー先フォルダ(D:\backup_to\%filename%)にコピーします。
※コピー先の%filename%(例:2017-07-30_backupフォルダ)は自動で作成されます。
ログファイル格納フォルダ(D:\log以下)に%filename%.log(例:2017-07-30_backup.log)の名前でログファイルが作成されます。
※下記参考リンクです。
④過去ログの削除
forfiles /p D:\log /d -30 /c "cmd /c del @file"
⇒D:\log以下に作成された過去ログの中で30日以上経過しているログを削除します。
※下記参考リンクです。
これをタスクスケジューラで日次実行すれば、ばっちりバックアップ運用の自動化が実現できますね(●´ω`●)
でゎでゎ☆彡