I had scripted previous date calculations, some of which are:

8293 » How can I return the date that is plus or minus n days from today?

9977 » How can I calculate the difference between two short dates?

0721 » General purpose date math routine.

I have now scripted PorMdays.bat to return a date in YYYY-MM-DD format that is the result of adding or subtracting n days from a short date, or from TODAY.

The syntax for using PorMdays.bat is:

\[call\] PorMdays NewYYYY-MM-DD DATEorTODAY +or-NN


NewYYYY-MM-DD is a call directed numeric environment variable that will contain the resulting YYYY-MM-DD.                              DATEorTODAY   is a valid short date, or the literal TODAY.                              +or-NN        is the number to add or subtract from DATEorTODAY, like 0, or +1, or -1, or +365.
NOTE: Because NewYYYY-MM-DD is a valid short date, it can be used in subsequent calculations, as in the following silly example:
call PorMdays Thisday today 0                              call PorMdays Yesday %Thisday% -1                              call PorMdays Tomday %Yesday% +2                              @echo Today is %Thisday%, Yesterday was %Yesday%, and Tomorrow is %Tomday%
PorMdays.bat contains:
                              @echo off                              if \{%4\} NEQ \{\} @echo Syntax: \[call\] PorMdays NewYYYY-MM-DD DATEorTODAY +or-NN (call PorMdays YMD today -1)&goto :EOF                              if \{%3\} EQU \{\} @echo Syntax: \[call\] PorMdays NewYYYY-MM-DD DATEorTODAY +or-NN (call PorMdays YMD today -1)&goto :EOF                              setlocal                              if /i "%2" EQU "TODAY" (                               set DT=now                              ) else (                               set DT="%2"                              )                              set RND=%RANDOM%                              @echo.s=DateAdd("d",%3,%DT%) >"%temp%\%~n0_%RND%.vbs"                              @echo.WScript.Echo year(s)^&right(100+month(s),2)^&right(100+day(s),2) >>"%temp%\%~n0_%RND%.vbs"                              for /f %%a in ('cscript //nologo "%temp%\%~n0_%RND%.vbs"') do set YYYYMMDD=%%a                              del /q "%temp%\%~n0_%RND%.vbs"                              set YMD=%YYYYMMDD:~0,4%-%YYYYMMDD:~4,2%-%YYYYMMDD:~6,2%                              endlocal&set %1=%YMD%