雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

DOS バッチで曜日算出をしてみた

職場で、「 DOS バッチでは曜日を取れない」とか云う声が聞こえてきたので、休憩時間にちょこちょこと書いてみました。(単なる備忘録です)

@echo off
setlocal

REM 日付の抽出
set YEAR=%DATE:~0,4%
set MONTH=%DATE:~5,2%
set DAY=%DATE:~8,2%

REM 算出の呼び出し
call :GETWEEK %YEAR% %MONTH% %DAY%

REM 結果表示
echo %ERRORLEVEL%
goto END

REM ----- 算出ロジック ここから -----
:GETWEEK
REM 引数の取得
set CHECKYEAR=%1
set CHECKMONTH=%2
set CHECKDAY=%3

REM 曜日の算出
if %CHECKMONTH% == 1 (
  set /A CHECKYEAR=%CHECKYEAR% - 1
  set /A CHECKMONTH=%CHECKMONTH% + 12
)
if %CHECKMONTH% == 2 (
  set /A CHECKYEAR=%CHECKYEAR% - 1
  set /A CHECKMONTH=%CHECKMONTH% + 12
)
set /A WEEK=(%CHECKYEAR% / 4 - %CHECKYEAR% / 100 + %CHECKYEAR% / 400 + (13 * %CHECKMONTH% + 8) / 5 + %DAY%) %% 7

exit /b %WEEK%
REM ----- 算出ロジック ここまで -----

:END
endlocal
@echo on

……まぁ、面倒ではありますね。
R さんのご指摘で、ロジックを修正。ご指摘ありがとうございました。 m(_ _)m( 2009/08/25 追記) バグがあったため修正版の記事を書きました。