在batch file中的前一天的variables

我需要编写一个batch file来调用一个命令,并传递前一天的date参数。

例:

[function] CCYYMMDD

我似乎无法find任何这样的例子。 而且我的公司不喜欢我们使用免费软件,所以我真的需要解决scheme是一个纯粹的基于DOS的解决scheme。

你可以从Dostips开始:日期和时间
有一些函数可以将日期评估为连续日计数,反之亦然。
所以这是结果

 call :jdate "%date%" JD_result set /a prev_day=JD_result-1 call :jdate2date %prev_day% YYYY MM DD echo Previous day is %DD%.%MM%.%YYYY% 

我找不到原来的解决办法,但是我在Rob Van Der Woude的网站上发现了一些很好的工作。

在那里发布的文件中存在一个错误,因为SET /A会将以零开头的字符串视为八进制,这在日/月日期以零开始时会导致问题。

如果您获得上面链接的文件,但是将JDate过程(第157行)的代码更改为:

 SET MonthChecker1=%2 SET MonthChecker2=%MonthChecker1:~0,1% IF %MonthChecker2%==0 ( SET MonthChecker3=%MonthChecker1:~1,1% ) ELSE ( SET MonthChecker3=%MonthChecker1% ) SET DayChecker1=%3 SET DayChecker2=%DayChecker1:~0,1% IF %DayChecker2%==0 ( SET DayChecker3=%DayChecker1:~1,1% ) ELSE ( SET DayChecker3=%DayChecker1% ) SET /A Month1 = ( %MonthChecker3% - 14 ) / 12 SET /A Year1 = %1 + 4800 SET /A JDate = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MonthChecker3% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DayChecker1% - 32075 FOR %%A IN (Month1 Year1) DO SET %%A= GOTO:EOF 

这是测试和工作在2K8R2箱子。 这是绝对值得的,因为它有能力确定主机系统上的日期格式是否来自注册表,这是我没有找到的其他解决方案。