2016-06-21 3 views
2

Ich habe eine Batch-Datei mit den folgenden Befehlen geschrieben, um den Status von schtasks zu überprüfen, und ich plane, dies in eine Schleife zu setzen.Check SCHTASKS Status in Batch-Datei

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% 

Aber ich erhalte dieses folgende Fehlermeldung:

ECHO is off. 
ECHO is off. 

Wenn ich folgendes schreiben:

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% 

Wenn ich das über dem erhalten wie folgt zusammen:

The syntax of the command is incorrect 

Wenn ich folgendes schreibe:

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% 

Wenn ich die obige erhalten Sie wie folgt vor:

Running 

Kann jemand mir bitte mit dem Skript helfen.

+0

„* Aber ich erhalte dieses folgende Fehlermeldung: ECHO ausgeschaltet ist. *“ - das ist kein Fehler, es ist, was Sie bekommen, wenn Sie anrufen 'echo' ohne Parameter, meldet es die Status. Sie beenden die for-Schleife am Ende der ersten Zeile mit '))' und 'ECHO %% I' befindet sich außerhalb der Schleife. Die zweite ist falsch, weil Sie '(' auf der gleichen Zeile wie 'do', nicht auf der nächsten Zeile) haben. Sie werden auch google' EnableDelayedExpansion' für Ihre Umgebungsvariablen wünschen. – TessellatingHeckler

+0

Sie wissen, PowerShell kann '(Get-ScheduledTask 'deploy_db'). State ', oder' Get-ScheduledTask | Wo State -eq Running' richtig? – TessellatingHeckler

+0

Bin ein Noob zu Powershell, wie kann ich es in Loop setzen.Führen Sie einen Schtask und überprüfen Sie bis es ist abgeschlossen? –

Antwort

2

Sie erhalten die Nachricht ECHO is off. (oder on), wenn Sie nur echo mit nichts danach eingeben. Es ist ein Zeichen, dass Ihre Variablen leer sind.

Die Variable %%I verliert den Gültigkeitsbereich, sobald Sie den DO-Teil von FOR verlassen haben. Ich hatte auch Probleme, die Linie zum Laufen zu bringen, wenn ich nicht den vollständigen Weg zu Schtasks lieferte.

Dies funktioniert für mich:

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% 

Wenn Sie in einer Schleife sind, haben Probleme mit der Update-Status haben. Wenn ja, versuchen:

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! 
Verwandte Themen