読者です 読者をやめる 読者になる 読者になる

Windows のバッチで実行日の曜日を文字列で確保する必要があったので作ったものをメモ書き

サーバーのデイリーバックアップ先フォルダ名に曜日名が入っていたんです・・・

@rem
@rem 曜日算出モジュール by かわはら
@rem 2014/8/1
@rem  実行日の曜日を算出
@rem output
@rem YYYYMMDD
@rem HHMM
@rem YYYY
@rem MM
@rem DD
@rem EXT YYYYMMDD_HHMM
@rem LOG LOG_YYYYMMDD_HHMM.txt
@rem WEEKDAY 文字列形式の曜日名
@rem Y 0(月)〜6(日)を返す
@rem
@rem broken
@rem DT TM YYYY2 MM2 DD2 X




set DT=%DATE: =0%
set DT=%DT:/=%
set TM=%TIME: =0%
set TM=%TM::=%


set YYYYMMDD=%DT:~0,8%
set HHMM=%TM:~0,4%

set EXT=%YYYYMMDD%_%HHMM%
set LOG=LOG_%YYYYMMDD%_%HHMM%.TXT

set YYYY=%YYYYMMDD:~0,4%
set MM=%YYYYMMDD:~4,2%
set DD=%YYYYMMDD:~6,2%


@rem 曜日算出 計算方法は↓を利用
@rem http://www.h2.dion.ne.jp/~p_soul/jchieyoubi.htm
@rem 年=A 月=B 日=C とすれば
@rem  IF B<3 THEN A=A-1 : B=B+13 : ELSE B=B+1
@rem  X=int(365.25*A)+int(30.6*B)+int(A/400)+C-int(A/100)-429
@rem  Y=X-int(X/7)*7
@rem  0なら月曜。
@rem  1なら火曜。
@rem  2なら水曜。
@rem  3なら木曜。
@rem  4なら金曜。
@rem  5なら土曜。
@rem  6なら日曜。

@rem set /A は算術計算をします
set YYYY2=%YYYY%
set MM2=%MM%
if "%MM%" == "01" set /a YYYY2=%YYYY% -1
if "%MM%" == "01" set MM2=13

if "%MM%" == "02" set /a YYYY2=%YYYY% -1
if "%MM%" == "02" set MM2=14

set /a MM2=1%MM2% + 1 - 100
@rem ↑MM2 は数字扱いのため、2桁とは限らない
@rem また、 08 09 だと、8進数とみなされてエラーになるため、
@rem 擬似的に1を頭につけて(=100を足して)あとから100を引いて
@rem  つじつまあわせ。

set /a DD2= 1%dd% - 100
@rem ↑DD2 は数字扱いのため、2桁とは限らない
@rem  また 08 09 だと、8進数とみなされてエラーになるため、
@rem 擬似的に1を頭につけて(=100を足して)あとから100を引いて
@rem  つじつまあわせ。


@rem ここまでで、 MM2 1月〜12月が (14 15 4 5 6 7 8 9 10 11 12 13)
@rem YYYY2 年は (-1 -1 )
@rem DD2 最初に0がついていない 日付 1 2 .... 9 10... 31

set /a X=(%YYYY2% * 36525 )/100 + (%MM2% * 306)/10 + (%YYYY2% / 400) + %DD2% - (%YYYY2% / 100) - 429

set /a Y=%X% - (%X% / 7 ) * 7

if "%Y%" == "0" set WEEKDAY=Monday
if "%Y%" == "1" set WEEKDAY=Tuesday
if "%Y%" == "2" set WEEKDAY=Wednesday
if "%Y%" == "3" set WEEKDAY=Thursday
if "%Y%" == "4" set WEEKDAY=Friday
if "%Y%" == "5" set WEEKDAY=Saturday
if "%Y%" == "6" set WEEKDAY=Sunday

set WEEKDAYNO=%Y%

echo %WEEKDAYNO% %WEEKDAY%

pause