批处理文件中的时间比较不起作用

时间:2016-05-29 18:23:04

标签: windows batch-file cmd

基本上我正在尝试创建的是一个脚本,只有在时间为LEQ而不是19:00(晚上7点)时才会运行,到目前为止我所做的是:

set myTime=%time%
set myFlag=false
if %myTime% LEQ 19:00 set myFlag=true
if myFlag=true (
*my script*
)

它返回此错误消息:“此时不期待86”,(86是变量'myTime'[​​14:36:11,86]的最后一个数字。它只是不起作用。

我也试过了:

set myTime=%time%
set myFlag=false
if %myTime% LEQ 19:00:00,00 set myFlag=true
if myFlag=true (
*my script*
)

两种方式我都得到相同的错误消息两位数不期望。有关如何解决这个问题的任何想法?甚至可以对Windows批处理文件进行时间比较吗?

2 个答案:

答案 0 :(得分:1)

Syntax: Escape Characters, Delimiters and Quotes

  

<强>符

     

分隔符将一个参数与下一个参数分开 - 它们分开了   命令行为单词。

     

参数通常用空格分隔,但任何一个都是空格   以下也是有效的分隔符:

     
      
  • 逗号(,)
  •   
  • 分号(;)
  •   
  • 等于(=)
  •   
  • Space()
  •   
  • Tab()
  •   
     

请注意,虽然/-通常用于分隔命令   选项,它们不在上面的列表中。这是因为批量   文件参数传递给CMD.exe,CMD.exe可以接受它自己的   参数(使用/-

调用)

下一个代码段应该有效(请参阅set /?if /?):

set "myTime=%time%"
set "myFlag=false"
if "%myTime%" LEQ "19:00:00,00" set "myFlag=true"
if "%myFlag%"=="true" (
   echo *my script*
)

请注意,上面的代码段与语言环境有关。您可以尝试下一个区域设置独立解决方案,类似于this answer to another question

SETLOCAL EnableExtensions
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "myTime=%%a"
set "myTime=%myTime:~8,6%"
set "myFlag=false"
if "%myTime%" LEQ "190000" set "myFlag=true"
if "%myFlag%"=="true" (
   echo *my script*
)

阅读

答案 1 :(得分:0)

Set Ag=WScript.Arguments

If CDate(Ag(0)) > CDate(Ag(1)) then 
    Wscript.echo "Param 1 greater than Param 2"
    wscript.quit 0
else
    Wscript.echo "Param 1 NOT greater than Param 2"
    wscript.quit 1
End If

批量使用(使用任何有效的时间/日期字符串)

scriptname.vbs 7pm 8pm
If errorlevel 0 if not errorlevel 1 echo Param 1 greater than param 2
If errorlevel 1 if not errorlevel 2 echo Param 2 greater than param 1

或者

scriptname.vbs 19:00:00 20:00:00
If errorlevel 0 if not errorlevel 1 echo Param 1 greater than param 2
If errorlevel 1 if not errorlevel 2 echo Param 2 greater than param 1