我需要编写一个批处理文件,调用一个命令并传递前一天的日期参数。
例如:
[function] CCYYMMDD
我似乎找不到任何这方面的例子。而且我的公司不喜欢我们使用免费软件,所以我真的需要解决方案是基于纯DOS的。
我需要编写一个批处理文件,调用一个命令并传递前一天的日期参数。
例如:
[function] CCYYMMDD
我似乎找不到任何这方面的例子。而且我的公司不喜欢我们使用免费软件,所以我真的需要解决方案是基于纯DOS的。
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系统上测试过并且运行正常。它绝对值得使用,因为它具有从注册表确定主机系统日期格式的能力,而我找到的其他解决方案都没有这种功能。
set /a Month=1%Month% %% 100
,它始终在数字前缀处添加1
,并使用模运算以安全的方式将它删除。 - jeb
date
命令根据系统本地化设置以不同的格式输出日期 - 这是针对一个机器还是可能有不同设置的多个机器? - DaveRandom