小規模かつ重要なデータを扱わない環境での実施が望ましいです。
※大切なデータのバックアップは、お金を払ってしっかりとしたソフトウェアを使うほうが良いでしょう。
いきなり本番運用を行うのではなく、少量のファイルで問題が起こらないことを確認しながらスモールスタートで進めることが望ましいです。
まずはじめに
ログファイルを圧縮するために、7-zipをインストールします。
↑圧縮しなくていいよ、という場合はインストール不要
ここで紹介するのは下記の構成の例
・Cドライブ→システムデータが格納されているHDD
・Dドライブ→ファイルサーバーとして共有するフォルダが存在しているHDD
・Eドライブ→バックアップ用のHDD
以下、コードは環境に応じて適宜置き換えてください
①ログファイルの出力先を定義する。
ーー>出力先フォルダ → "E:\logs"
ーー>出力ファイル名 → "YYYY-MM-DD_backup_job1.log"
set logfile="E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.log"
②"D:¥Shared"フォルダの中身を、"E:\Shared"フォルダにコピーする
オプションは以下の通り
ーー>"mir" → フォルダをそっくりそのままコピーするオプション
ーー>"copyall" → ファイル情報もコピーするオプション
ーー>"R:0" → コピーに失敗した場合の再試行回数のオプション(ここでは0回として設定)
ーー>"LOG:****" → 処理したログファイルの出力先を指定(①で指定した出力先を変数で設定)
ーー>"NP" → 進行状況を表示しないオプション
ーー>"NDL" → コピーに成功したものはログファイルに出力しない、失敗したものだけ出力する。
robocopy D:\Shared E:\Shared /mir /copyall /R:0 /LOG:"%logfile%" /NP /NDL
E:\Sharedフォルダは事前に作成しておかないとエラーになります。
③ログファイルを圧縮する(圧縮先は②と同じフォルダ)
コードの説明→ 7zipを使うよ ZIPファイルの出力先はここだよ 圧縮するデータのソースはこれだよ
"C:\Program Files\7-Zip\7z.exe" a "E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.zip" "E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.log"
※改行しているように見え場合もありますが、1行のコードです。
④圧縮が終われば元のログファイルはいらないので削除する
del "E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.log"
⑤5年以上経過するZIPファイルはいらないので削除する
ファイルの更新日が5年以上前(コードでは1825日前)のものはすべて削除する
forfiles /P "E:\logs" /M "*.zip" /D -1825 /C "cmd /c del @file"
⑥正常に終わったことをお知らせする
exit 0x0
コードのまとめ
set logfile="E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.log"
robocopy D:\Shared E:\Shared /mir /copyall /R:0 /LOG:"%logfile%" /NP /NDL
"C:\Program Files\7-Zip\7z.exe" a "E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.zip" "E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.log"
del "E:\logs\%date:~0,4%-%date:~5,2%-%date:~8,2%_backup_job1.log"
forfiles /P "E:\logs" /M "*.zip" /D -1825 /C "cmd /c del @file"
exit 0x0
あとはタスクスケジューラにこのバッチファイルを定期実行するように設定すると便利