我需要编写一个调用命令的批处理文件,并传递前一天的日期参数。
示例:
[功能] CCYYMMDD
我似乎无法找到任何这方面的例子。而且我的公司不喜欢我们使用免费软件,所以我真的需要解决方案才能成为纯粹基于DOS的解决方案。
答案 0 :(得分:2)
您可以从Dostips: Date and Time开始 有一些功能可以将日期评估为序列日计数,反之亦然
是结果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%
答案 1 :(得分:0)
我找不到我原来的解决方案,但我发现something over at Rob Van Der Woude's site可以很好地完成工作。
在那里发布的文件中有一个错误,因为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盒子上测试和工作的。与其他解决方案相比,它绝对值得使用,因为它能够确定主机系统上的日期格式来自注册表,而我找不到其他解决方案。