批处理代码:日期之间或更大/更小?

时间:2011-12-21 07:12:52

标签: date batch-file

我有一个简单的批处理脚本可以在特定日期执行某些操作,但我希望它能够在日期之间执行此操作,或者始终在特定日期之前或之后执行此操作。

@ECHO OFF

IF "%DATE%"=="12/12/2011" GOTO ARMREST
GOTO END

:ARMREST
ECHO HELLO WORLD!
PAUSE

:END

现在我尝试使用“> =”但它没有用,我已经全部结束但似乎无法找到我正在寻找的东西。我甚至不知道是否可以使用那种复杂的布尔值?这适用于Windows 7,非常简单的脚本,只是想知道日期。

另外,我有一台西班牙机器,其日期值与英国不同 - 所以英国的是“12/02/2011”(DD / MM / YYYY),而西班牙的机器是12/2/2011 (dd / m / yyyy)我想,但是我可以找到一个简单的@ECHO%DATE%不能吗?!

谢谢!

2 个答案:

答案 0 :(得分:1)

%DATE%使用短日期格式返回当前日期,即完全(无限制)自定义。一个用户可以将其系统配置为返回Fri040811,另一个用户可以选择08/04/2011 ...这对于BAT程序员来说是一个完整的噩梦。

可能的解决方案是使用WMIC。 WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table以方便的方式返回日期,以便用FOR。

直接解析它
@ECHO OFF
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   SET /A DAYS=%%F*10000+%%D*100+%%A
)
IF %DAYS% GTR 20111210 (
  IF %DAYS% LSS 20111230 (
    ECHO Yes!
  )
)
GOTO :eof

答案 1 :(得分:0)

您必须使用格式yyyymmdd标准化所有日期以进行比较。例如:

rem Convert from dd/m/yyyy to yyyymmdd
set date=%date:/=/0%
set year=%date:~-4,4%
set month=%date:~-8,2%
set day=%date:~0,2%
set normdate=%year%%month%%day%

检查变量substring的实例http://ss64.com/nt/syntax.html并替换。

使用lss,leq,gtr和geq进行比较。

相关问题