DOS バッチで曜日を算出:修正版
mkw さんのご指摘の通り、以前紹介したコードにミスがありました。
前回のコードを使うと、 8 〜 12 月でコケます。。。 m(_ _)m
なので、修正版のコードを再掲出させて頂きます。ご迷惑をおかけ致しました。
# ついでに、サブルーチン内の一箇所で変数名を間違っていた( CHECKDAY を使うべきところで DAY を使っていた)ので、そこもあわせて修正しています。
@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 対象日 = %YEAR%/%MONTH%/%DAY% echo 曜日 = %ERRORLEVEL% goto END REM ----- 算出ロジック ここから ----- :GETWEEK REM 引数の取得 set CHECKYEAR=%1 set CHECKMONTH=%2 set CHECKDAY=%3 REM ===== 2009/08/25 追加 ここから ===== REM 月と日の先頭 "0" を除去 if "%CHECKMONTH:~0,1%" == "0" ( set CHECKMONTH=%CHECKMONTH:~1,1% ) if "%CHECKDAY:~0,1%" == "0" ( set CHECKDAY=%CHECKDAY:~1,1% ) REM ===== 2009/08/25 追加 ここまで ===== 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 + %CHECKDAY%) %% 7 exit /b %WEEK% REM ----- 算出ロジック ここまで ----- :END endlocal @echo on