はじめに
Windowsで、曜日単位で指定したフォルダをバックアップするバッチです。
gitサーバのデータフォルダをデイリーでバックアップする必要があったので作成しました。
その内容を共有します。
例ではC:¥scripts内にすべてのファイルを配置しています。
私はスケジューラから毎朝2:00にgitBackup.batを実行するようにしていました。
「タスクスケジューラの基本的な使い方(Windows 7/8/8.1編)」
http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html
ファイル作成
gitBackup.bat
キックする対象のbatファイル。
以下の内容ですと平日のみバックアップを作成します。
@echo off
echo 開始
cscript /b C:¥scripts¥wday.vbs
REM echo wday:%errorlevel%
if %errorlevel%==7 echo.
if %errorlevel%==6 BackupExec.bat 06_Friday
if %errorlevel%==5 BackupExec.bat 05_Thursday
if %errorlevel%==4 BackupExec.bat 04_Wednesday
if %errorlevel%==3 BackupExec.bat 03_Tuesday
if %errorlevel%==2 BackupExec.bat 02_Monday
if %errorlevel%==1 echo.
wday.vbs
上記ファイルから呼ばれる、曜日取得のスクリプトファイル。
@echo off
echo 開始
cscript /b C:¥scripts¥wday.vbs
REM echo wday:%errorlevel%
if %errorlevel%==7 echo.
if %errorlevel%==6 BackupExec.bat 06_Friday
if %errorlevel%==5 BackupExec.bat 05_Thursday
if %errorlevel%==4 BackupExec.bat 04_Wednesday
if %errorlevel%==3 BackupExec.bat 03_Tuesday
if %errorlevel%==2 BackupExec.bat 02_Monday
if %errorlevel%==1 echo.
BackupExec.bat
ネットワーク上のドライブを作成し、ファイルコピー後にその設定を削除、という動作をさせています。
バッチ実行ユーザに権限が足りないとここで失敗するかもしれないので注意してください。
この例の場合、Cドライブ直下のgitblitフォルダを、ネットワーク上の別のマシンのbackup¥daily¥gitフォルダにコピーしています。
@echo off
echo %1
set logfile="%date:‾0,4%-%date:‾5,2%-%date:‾8,2%_backup.log"
NET USE Z: /d /y
NET USE Z: ¥¥[IPアドレス]¥backup [パスワード] /USER:[ユーザ名]
C:¥Windows¥System32¥Robocopy.exe C:¥gitblit Z:¥daily¥git¥%1 /E /R:2 /W:10 /NP /LOG+:"%logfile%"
NET USE Z: /d /y
おわりに
曜日単位で作成されたバックアップフォルダは、翌週上書きされるので気を付けてください。
適宜、値を変更して使用してみてください。
何かの参考になりましたら幸いです。