CMD.EXE だけで翌日の日付けを求める

前回、前日日付けを求めるスクリプトを書いたので、今回は翌日版。2月の処理がちょっと複雑になってしまった。

@echo off
REM 日付の翌日を求める。結果は ANS にセット。
REM 引数(YYYYMMDD or YYYY-MM-DD or YYYY/MM/DD)がないときは本日とする。
if "%1"=="" (for /F %%A in ('date /t') do set ANS=%%A) else set ANS=%1
if not "%ANS:~8%"=="" set/a ANS=%ANS:~0,4%%ANS:~5,2%%ANS:~8,2%
set/a ANS+=1
if 1%ANS:~-2% leq 128 goto ans
if %ANS:~-2%==32 set/a ANS+=100-31&if not %ANS:~4,2%==12 goto ans
if %ANS:~4,2%==13 set/a ANS+=10000-1200&goto ans
if %ANS:~4,2%==02 if %ANS:~-2% geq 29 set/a ANS+=2-(!(%ANS:~0,4%%%4)^^!(%ANS:~0,4%%%100)^^!(%ANS:~0,4%%%400))*(31-%ANS:~-2%)
for %%M in (02 04 06 09 11) do if %ANS:~-4%==%%M31 set/a ANS+=100-30
:ans

引数形式や使い方、日付けの正当性チェック無しなど、すべて前回と同じ。

if 1%ANS:~-2% leq 128 goto ans

は不要だが、多くのケースでの速度向上のために入れてある。

n日前後を求めるJScript内蔵版はまた別途書くことにする。