Windows標準コマンドATと7-Zipでディレクトリのバックアップ

Windows標準コマンドに『AT』という、プログラムやコマンドを指定時刻に実行するタスクスケジューラがあります。

これを使って、毎日定時に7-Zipでディレクトリをzipに圧縮してバックアップしたらどうなるかな、という話です。
コマンドブロンプトとbatの勉強を兼ねて作ってみました。

2006/09/07



ATコマンドについて

コマンドブロンプトで
at /?
とやると使い方が表示されます。



▼使い方
タスク閲覧:at
タスク登録:at [time] /every:[起動したい曜日カンマ区切り] [処理コマンド]
タスク削除:at [番号] /delete

例: at 01:00 /every:M,T,W,Th,F cmd.exe /c c:\backup\atbackup.bat
平日(月〜金)の深夜1時にc:\backup\atbackup.batを実行する

参考:コマンドブロンプトを使ってみよう atコマンド



7-Zipについて

7-Zipはファイルをzip形式で圧縮できるアーカイバです。
高い圧縮率を誇り、GNU LGPLで配布されているフリーソフト。
今回はコマンドラインから使える「7-Zip Command Line Version」(Windows用)を使います。
ダウンロードしてきて適当な場所に7za.exeを置いておきます。

使い方は日本語訳のヘルプファイルとかもサイトにあるので、そちらを。

大体こんな感じ↓
c:\7za.exe a -tzip test.zip c:\mail\
c:\mail\をtest.zipに圧縮

Windowsはデフォルトだとコマンドラインからファイル圧縮できないって、今回初めて知りました(ntfsのcompactとかはあるんだけど)。


batファイル作成とat登録

batファイル内で、指定ディレクトリをzip圧縮バックアップします。
以下のように書いてみました。
atbackup.zip
・ディレクトリをdaily.zipという名前で上書きバックアップ
・月に一度、yyyymm.zipの名前でバックアップを蓄積
・開始時間、終了時間、7-zipログを、log.txtに書き出し

んで、これを平日深夜1時に実行するようatに登録します。
at 01:00 /every:M,T,W,Th,F cmd.exe /c c:\backup\atbackup.bat


以下、batファイル
(コマンドブロンプトって、「rem」でコメント行なんですね。remって何の略だろ)

rem ▼概要===========================================================
rem 指定ディレクトリをzip圧縮してdaily(日々上書き)、monthlyで保存する
rem atコマンドによるスケジュール実行用
rem ▼使い方=========================================================
rem ↓設定で各ディレクトリのパスを指定
rem zip圧縮ソフトの7.zipのコマンドライン版(7za.exe)を
rem http://www.7-zip.org/ja/から持ってきて、設定の「zip」にパスを指定
rem コマンドブロンプトのatコマンド(タスクスケジューラ)にてこのbatを登録する
rem
rem atコマンドの使い方は、以下の通り
rem 閲覧:at
rem 登録:at [time] /every:[起動したい曜日カンマ区切り] cmd.exe /c [batのファイルパス]
rem 削除:at [番号] /delete
rem
rem 例 :at 01:00 /every:M,T,W,Th,F cmd.exe /c c:\backup\atbackup.bat
rem (平日、月〜金の01時に実行する)
rem ▼設定===========================================================
rem 【必須】バックアップするディレクトリ
set target="C:\Documents and Settings\My Documents\Visual Studio 2005\Projects\"
rem 【必須】バックアップするファイルの拡張子(*.txt、etc)
rem 全ての場合は「*」(「*.*」ではない)
set ext_tr="*"
rem 【必須】除外する拡張子(*.txt、etc)
rem 特にない場合は「none.none」とかテキトーに。空白は不可。
set ext_x="*.exe"
rem 【必須】ログやバックアップファイルを保存するディレクトリ
set logdir="c:\backup\VisualStudio2005\"
rem 【必須】7zip(コマンドライン用)ファイル名
set zip="c:\7za.exe"
rem バックアップファイル拡張子
set ext_bu=".zip"
rem ログファイル名
set logfile="log.txt"
rem ▼実行==========================================================
set daily=%logdir%daily%ext_bu%
set monthly=%logdir%%date:~0,4%%date:~5,2%%ext_bu%
echo start time : %date% %time% > %logdir%\%logfile%
echo target=%target% >> %logdir%\%logfile%
echo logdir=%logdir% >> %logdir%\%logfile%
if exist %daily% del %daily%
%zip% a -tzip %daily% %target%%ext_tr% -x!%ext_x% -r >> %logdir%%logfile%
if not exist %monthly% copy /b %daily% %monthly% /b
echo end time : %date% %time% >> %logdir%\%logfile%



参考link