2016-06-21 68 views
2

我已經寫了一個批處理文件,其中包含以下命令以檢查schtasks狀態,並計劃將其置於循環中。檢查批處理文件中的SCHTASKS狀態

FOR /F %%I IN ('SCHTASKS /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready)) 
ECHO %%I 
ECHO %STATUS% 

但我得到這個以下錯誤:如果我寫了下面的

ECHO is off. 
ECHO is off. 

FOR /F %%I IN ('SCHTASKS /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO 
(IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready)) 
ECHO %%I 
ECHO %STATUS% 

如果我做了得到如下以上:

The syntax of the command is incorrect 

如果我寫下:

FOR /F %%I IN ('SCHTASKS /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready)) 
ECHO %STATUS% 

如果我做了上述得到如下:

Running 

誰能請幫助我的腳本。

+0

「*但我得到這個以下錯誤:ECHO處於關閉狀態。*」 - 這是不是一個錯誤,這是當你調用'echo'不帶參數,你會得到什麼,它報告狀態。你用'))'結束第一行結尾的for循環,'ECHO %% I'在循環之外。第二個是不正確的,因爲你必須'('和'do'在同一行,而不是在下一行。你也想爲你的環境變量google'EnableDelayedExpansion'。 – TessellatingHeckler

+0

你知道PowerShell可以做'(Get-ScheduledTask'deploy_db')。State',或者'Get-ScheduledTask | Where State -eq Running'對嗎? – TessellatingHeckler

+0

是Powershell的一個小菜鳥,我怎麼把它放到Loop中。運行一個Schtask並且繼續檢查直到它完成? –

回答

2

如果您僅輸入echo,您將收到消息ECHO is off.(或on)。這是一個標誌,你的變量是空的。

一旦您退出FORDO部分,變量%%I就會丟失範圍。如果我沒有提供schtasks的完整路徑,我也遇到了問題。

這個工作對我來說:

FOR /F %%I IN ('C:\Windows\System32\schtasks.exe /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (
    IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready) 
    ECHO %%I 
) 
ECHO %STATUS% 

如果你在一個循環的時候,你可能有狀態更新問題。如果是這樣,請嘗試:

SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /F %%I IN ('C:\Windows\System32\schtasks.exe /QUERY /S <servername> /FO LIST /TN "\MICROSOFT\deploy_db" ^| FIND /C "Running"') DO (
    IF %%I == 0 (SET STATUS=Running) Else (SET Status=Ready) 
    ECHO %%I 
) 
ECHO !STATUS! 
相關問題