Windows – ファイル名を日時にしてバックアップ!

Updated:


今日も、Windowsのバッチ処理についてです。

Windowsのファイルをバックアップする時に、世代管理のできるバックアップソフトを使わない限り、たいていはファイルが上書きされてしまいます。

でも実際には、前回のバックアップではなく、もっと前の時点のファイルを復元したいってことがあると思います。

そこで、僕はよく以下のようなバッチファイルを作ってバックアップしています。 (この方法は、「今のこの状態をバックアップしたい」という場合に有効だと思います) ※定期的なバックアップは、別途世代管理のできるフリーのバックアップソフトを使用していますが。。。

【概要】 あるフォルダの内容を、LZh圧縮して、ファイル名に日付・時刻を付加して保存。

以下がバッチファイルの例です。 [ 任意のファイル名.bat ]

@TITLE ■ 圧縮中... 

@REM **** 環境変数設定
@SET BAK_DATA=D:\00_MyDocuments\01_WWW\html\
↑ バックアップしたいフォルダを設定
@SET BAK_LZH=D:\20_BAK\BAK_Noah\html\
↑ 圧縮ファイルの保存先フォルダを設定
@SET BAKDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
↑ 日付を設定(YYYYMMDD形式)
@SET BAKTIME=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
↑ 時刻を設定(HHMMSS形式)
@IF "%TIME:~0,1%"==" " SET BAKTIME=0%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%
↑ 時間(HH部分)が1桁のときゼロ埋めする設定
@SET LOGFILE=D:\03_Bat\Log\LZH_HTML.log
↑ ログファイルの設定

@REM **** 圧縮保存
@C:
@CD "C:\Program Files\ArchiverDll\UNLHA32"
C:\PROGRA~1\UNDLL\UNLHA32 a -rd %BAK_LZH%html_%BAKDATE%_%BAKTIME% %BAK_DATA% *.*
@IF NOT ERRORLEVEL==0 GOTO :BAK_ERR

:BAK_END
@SET BAKDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
@SET BAKTIME=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
@IF "%TIME:~0,1%"==" " SET BAKTIME=0%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%
@ECHO ■■■■ BACKUP E N D [ %BAKDATE% %BAKTIME% ] ■■■■(正常終了) >> %LOGFILE%
@ECHO. >> %LOGFILE%
@IF %1==1 SHUTDOWN -s -t 10
@EXIT /B

:BAK_ERR
@SET BAKDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
@SET BAKTIME=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
@IF "%TIME:~0,1%"==" " SET BAKTIME=0%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%
@ECHO ■■■■ BACKUP E N D [ %BAKDATE% %BAKTIME% ] ■■■■(異常終了) >> %LOGFILE%
@ECHO [ ERRORLEVEL = %ERRORLEVEL% ] >> %LOGFILE%
@ECHO. >> %LOGFILE%
@EXIT /B

今回、上記で重要なのは「環境変数設定」の部分です。 圧縮に関しては、今回説明しません。 (コマンドラインで使用できるフリーソフトを探せばありますんで)

このバッチファイルをデスクトップに置くなどして実行しやすいようにしておけば、「今この状態でバックアップとっておきたい」というようなときに、即バックアップできます。 しかも、前回以前にバックアップしたものも上書きされずに残っています。

但し、古いバックアップファイルを削除する機能は考慮していないので、自分で適当な時期(本当に不要と判断した時)に手動で削除してください。

特にシステム開発中とかには、有効利用できると思います。 (あの時に戻りたいってことがよくあるはず(?))

今回は以上です。 それでは。





 

Sponsored Link

 

Comments