2015/09/12

フォルダ単位で差分バックアップするAutoHotkeyスクリプト

前に作ったスクリプトの改良版です。AutoHotkeyのほうが(DllCallとか使わない限りは)簡単になりやすいのでコマンドプロンプトではなくAHKスクリプトでやってます。zip書庫に固めてバックアップするため7zip、正確には7z.exeが必要です。
概要はこんな感じです。
backupapp1 こんな感じのフォルダを、backupapp2
こんな風にバックアップしようということです。Diffフォルダには2回目からの差分書庫がバックアップされます。簡単に説明すると2015年9月12日8時にapp1をバックアップするとベースになっている書庫app1.zipが存在する場合、Diffフォルダにapp1201509120800.zipという時刻が付いた差分書庫が作成されます。ベース書庫+差分書庫で元に戻すことが可能です。ただしベース書庫から消したファイルも元に戻るので自分で消さないといけません。(7z書庫だと消去した差分をアンチアイテムで自動で消すことも可能ですが、事故が怖いので自分で消すようにしてます)
----ここからAHKスクリプト----
#NoEnv
; 保存先の場所を指定、最後に\はつけません。存在しない場合は実行されません。
DestinationPath=E:\backup
;保存先が存在しなければスクリプトを終了します。
IfNotExist, %DestinationPath%
ExitApp
; 7z.exeのスイッチを入力します 下の例では圧縮形式はzip/deflate他はデフォルト、使用中ファイルも圧縮するという内容のスイッチとなっています。
SevenZipCommSwitch=-tzip -ssw -y -mtc=on
; u(更新オプション)スイッチを入力します。詳細は7zipの日本語ヘルプをご覧ください。このスイッチは差分バックアップ用です。
SevenZipUoption=p0q0r2x2y2z0w2
;ちなみに同期するならこんな感じです。
;SevenZipUoption=p1q0r2x1y2z1w2
;7z.exeのパス
7zpath=D:\Apps\Tools\Path\7z.exe
;バックアップするフォルダのパスを指定、最後に\はつけません。
SourcePath=D:\Apps

;ベースのバックアップ書庫が存在しなければ作成する。初回起動用です。
IfNotExist %DestinationPath%\*.zip
{
;保存するフォルダの中にあるフォルダ、つまりサブフォルダごとに個別に圧縮します。
Loop, %SourcePath%\*, 1
{
RunWait, %7zpath% u %SevenZipCommSwitch% "%DestinationPath%\%A_LoopFileName%.zip" "%A_LoopFileFullPath%\", ,Min
}
Return
}
;バックアップの保存先にベース書庫が存在する場合、サブフォルダDiffに差分書庫を名前に作成時刻を付けて作成します。
else
{
Loop, %SourcePath%\*, 1
{
RunWait, %7zpath% u "%DestinationPath%\%A_LoopFileName%.zip" -u%SevenZipUoption%!"%DestinationPath%\Diff\%A_LoopFileName%%A_NoW%.zip" "%A_LoopFileFullPath%\" %SevenZipCommSwitch%, ,Min
}
Return
}
ExitApp

0 件のコメント:

コメントを投稿