2016年1月19日火曜日

ウィンドウズのバッチファイルで曜日を取得する

参考:バッチで日付の操作 Linux でシェルスクリプトを書くよりも、Windows のバッチファイルは曲者で苦労します。 今回は、定期で PostgreSQL のバックアップファイルをとりたいので、曜日でローテションする事を考えました。
@echo off
REM 日付の曜日を求める
REM 日付はYYYY/MM/DD 形式とする。結果は環境変数 yobi へ返す。
REM 引数がないときは本日とする。
if "%1"=="" (  
    set orgdate=%date:~-10,10%
) else (
    set orgdate=%1
)

:年月日の分割
set yy=%orgdate:~-10,4%
set mm=%orgdate:~-5,2%
set dd=%orgdate:~-2,2%
set dayfile=%yy%%mm%%dd%

:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100
if "%mm%" LEQ "2" (set /a yy=yy-1&&set /a mm=mm+12)
set /a ans=yy + yy/4 - yy/100 + yy/400 + (13*mm+8)/5 + dd
set /a wday=ans %% 7
if %wday%==0 (
 set youbi=日曜日
 set syoubi=日
) else if %wday%==1 (
 set youbi=月曜日
 set syoubi=月
) else if %wday%==2 (
 set youbi=火曜日
 set syoubi=火
) else if %wday%==3 (
 set youbi=水曜日
 set syoubi=水
) else if %wday%==4 (
 set youbi=木曜日
 set syoubi=木
) else if %wday%==5 (
 set youbi=金曜日
 set syoubi=金
) else if %wday%==6 (
 set youbi=土曜日
 set syoubi=土
)
:echo %wday%
:echo %youbi%
バックアップは、こんな感じ
REM 環境変数のスコープをバッチ内に限定
Setlocal
set PGPASSWORD=%1%
set CURPATH=%~dp0
REM PostgreSQL インストール・ディレクトリ
set PGPATH=C:\Program Files\PostgreSQL\9.4\bin
REM バックアップ先ディレクトリ
set BKDIR=C:\DatabaseBackup
call %CURPATH%youbi.bat
REM mydb のバックアップを取る
"%PGPATH%\pg_dump.exe" -h localhost -p 5432 -U postgres -Fc -v -f%BKDIR%\%youbi%backup.dmp mydb 2> %BKDIR%\%youbi%backup.log
:"%PGPATH%\pg_dump.exe" -h localhost -p 5432 -U postgres -Fc -v -f%BKDIR%\%dayfile%backup.dmp mydb 2> %BKDIR%\%dayfile%backup.log
古いファイルを削除する手段がわかった
set BKDIR=C:\DatabaseBackup
forfiles /p %BKDIR% /m "*.dmp" /d -30 /c "cmd /c del /Q @file"
forfiles /p %BKDIR% /m "*.log" /d -30 /c "cmd /c del /Q @file"

0 件のコメント: