2016-05-29 88 views
0

基本上我試圖創建的是,如果時間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* 
) 

這兩種方式我得到的SA me error message 沒有預計的兩位數字。有關如何解決這個問題的任何想法?甚至可以在Windows批處理文件上做一次時間比較?

+0

有一個在批處理編程無(本機)的方式來做到真正的時間戳比較。您只能比較字符串和數字;像'19:00'或'19:00:00,00'這樣的東西被視爲字符串。但是,如果時間格式導致固定長度的值,則可以將它們與字符串進行比較以實現預期結果。爲避免'''字符出現問題,請將比較表達式用引號引起來,例如:'if「%myTime%」LEQ「19:00:00,00」' – aschipfl

回答

1

Syntax: Escape Characters, Delimiters and Quotes

定界符

分隔符與下一分離一個參數 - 它們的 命令排隊分成字。

參數是最經常由空格分隔,但任何 以下也都是有效的分隔符:

  • 逗號(,)
  • 分號(;)
  • 等於(=)
  • 空間()
  • 製表符()

請注意,雖然/-通常用於分隔命令 選項,但它們不在上述列表中。這是因爲批處理文件 參數傳遞到的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* 
) 

閱讀

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