批处理文件中的前一天变量

时间:2011-08-15 14:16:17

标签: windows date batch-file dos

我需要编写一个调用命令的批处理文件,并传递前一天的日期参数。

示例:

[功能] CCYYMMDD

我似乎无法找到任何这方面的例子。而且我的公司不喜欢我们使用免费软件,所以我真的需要解决方案才能成为纯粹基于DOS的解决方案。

2 个答案:

答案 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盒子上测试和工作的。与其他解决方案相比,它绝对值得使用,因为它能够确定主机系统上的日期格式来自注册表,而我找不到其他解决方案。