I needed something that would subtract days from the current date while checking leap years, etc. and this worked great.
I just call it from those scripts with the needed parameter (number of days to subtract), and then have it call back the calling script with substitutions and pass a parameter back to the original script for the modified (subtracted) date.
Here are examples:
Script needing date calculation variable set:
IF "%1"=="" goto modifydate
:modifydate
SET subtractdays=5
SET ModDateScript=\serversharepathCalled_ScriptsModDate.cmd
CALL "%ModDateScript%" %subtractdays% "%~fnx0"
Script which will calculate and pass back a %moddate% parameter to the original calling script to be set as a variable for it to process accordingly. You will simply put this at the end of the script you call to modify/subtract days from the current date (ModDate.cmd).
SET moddate=%mm%/%dd%/%yyyy%
Call %2 %moddate%
GOTO EOF
I was able to test and determine that these lines from the original script posted:
set yyyy=
set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ( date /t ) do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ( date /t ) do (
for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ( echo.^|date ) do (
set %%x=%%u
set %%y=%%v
set %%z=%%w
set $d1=
set $tok=))
if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100
Can be replaced with just this one single line and it works just as well:
FOR /F "tokens=2-4 delims=/ " %%A IN ("%date%") DO SET "mm=%%A" DO (& SET "dd=%%B") DO (& SET "yyyy=%%C")
Please explain what those lines (the ones I changed to just the one line with and statements) do anyways because I cannot tell the difference quickly testing. I subtracted back to the 19th century and it appeared accurate to me. I thought perhaps it helped handle the calculations where the modified year would be less than 2000 -- but I didn t see that unless I m missing something.
Otherwise this one script can be easily called and pass back the %mm%/%dd%/%yyyy% as a parameter for several scripts which need their own calculations. Great and very efficient batch solution. I can pass the argument as %1, %2, %3, etc. and still use the setlocal in that script for the current date -- just make a variable something like moddate=%1, etc.
Lastly, I challenge any batch script expert to optimize this script even further and post back the results for batch people to test.
Thanks,
P