実行月の1ヶ月前を取得する
:: 実行年月の1ヶ月前をYYYYMM形式で出力(バグあり) ::8月と9月の出力がおかしい ::デバッグ用 set DT1=201008 ::set DT1=%date:/=% set YYYY=%DT1:~0,4% set MM=%DT1:~4,2% ::ゼロ埋めするかどうか set FLG_ZERO=0 if "%MM%"=="01" goto NOT_ZERO if "%MM%"=="12" goto NOT_ZERO if "%MM%"=="11" goto NOT_ZERO set FLG_ZERO=1 :NOT_ZERO ::前年月を算出 if "%MM%"=="01" ( set /a YYYY-=1 set MM=12 ) else ( set /a MM-=1 ) ::ゼロ埋め set YYYYMM= if "%FLG_ZERO%"=="1" ( set YYYYMM=%YYYY%0%MM% ) else ( set YYYYMM=%YYYY%%MM% ) echo %YYYYMM% pause
原因は、08と09が10進数でなく、8進数で認識されてしまうから。
以下、set /?より抜粋。
コマンド スクリプト外でコマンド ラインから SET /A を実行すると、
式の最終的な値が表示されます。
割り当て演算子を使うには、割り当て演算子
の左側に環境変数名が必要です。
数値は 10 進数ですが、プレフィックスとして 0x
を付けると 16 進数、0 を付けると 8 進数になります。従って、0x12 は 18、
あるいは 022 と同じです。
8 進表記を使う場合は、注意してください。08 や
09 は、8 と 9 が有効な 8 進数ではないため、
有効な数値ではありません。