Robocopyを用いて、差分バックアップ、増分バックアップを行う方法について、記事「RoboSyncを使って差分・増分バックアップを設定してみる」で紹介しました。今回は、RoboSyncを用いた実践的な増分バックアップの設定をしてみます。以下のようなシナリオを想定してRoboSyncでの設定方法について作ってみました。
バックアップシナリオ
上記シナリオを実現する増分バックアップ設定例は以下になります。
cd /d Z:\backup\My Data set TT=%time: =0% set dest=%date:/=%%TT:~0,2%%TT:~3,2%%TT:~6,2%-inc
実行前スクリプトでは、カレントディレクトリを変更し、コピー先フォルダ名を作成します。コピー先フォルダ名は、"20200112192030-inc" のフォーマットになります。
if %errorlevel% == 0 rmdir /s /q %dest% powershell -command "dir *-inc | sort -Descending | select -skip 20 | ? { $_.LastWriteTime -lt (Get-Date).AddDays( -14 ) } | del -recurse"
まず、増分バックアップの場合、変更されたファイルが1つもなければ、コピー先フォルダは空のフォルダになるので、残しておく必要がありません。その場合には、コピー先フォルダを削除してしまいます。%errorlevel% は直前に実行したrobocopy の戻り値を参照しています。robocopyの戻り値が 0 というのは、「コピーしたファイルが一つもなかった」ことを示しています。その場合、コピー先フォルダを削除(rmdir)しています。
robocopyの戻り値については、以下記事をご覧ください。
次に、2行目の powershellコマンドですが、以下のような流れで処理が行われます。
となります。つまり、「直近20回、または、14日以内のバックアップは保存する。それ以外のものは削除する」となります。
バックアップするフォルダの中に、読み取り専用ファイルや隠しファイルが存在する場合、強制的に削除できるよう、del コマンドに -force オプションを追記し、del -recurse -force のようにしてください。
また、細かい注意ですが、dir のファイル指定の個所は dir * のようにせず、dir *-inc のように明示的にフォルダの一部文字列を指定することをお勧めします。万一の事故で、関係ないファイルやフォルダまで削除してしまうことを防止するためです。
いかがでしょうか。是非やってみてください。
(2020/2/9) 実行後スクリプトのpowershellでフォルダを削除する箇所において、読み取り専用ファイルや隠しファイルが存在した場合、delコマンドに -force オプションを追記するコメントなどを追加。
RoboSync: RobocopyのためのGUIツール
本サイトで公開しているツールです。ダウンロードはこのバナーをクリック!
Version 1.3.27 をリリースしました! (2021/1/1)
RobocopyをGUIから実行できるようにするツールです。コマンドプロンプトを表示することなく、GUI画面からほぼマウス操作だけで実行までできます。
Robocopyがバックグラウンドでそのまま実行されますので設定に迷うことはありません。
・ 複数のコピー項目の作成と管理。
・ スクリプトファイル(バッチファイル)出力が可能。スケジューラによるバックグラウンド処理にも使えます。
・ Robocopyによるコピー実行前に、実行プレビュー(/L)、パラメータのチェック(/QUIT)が可能。
・ Robocopyのパラメータ設定の簡易チェック、Robocopy実行前の簡易チェックを行います。
・ Robocopy実行前後で実行するスクリプトを定義可能。
・ Robocopy実行途中での中断、実行ログの履歴管理と保存が可能。
【関連記事・関連コンテンツ】