2017-03-03 5 views
0
sc stop myService > nul 

for /l %%A in (1,1,5) do (
    for /f "tokens=3 delims=: " %%H in ('sc query "myService" ^|findstr "STATE"') do (
    if /I "%%H" EQU "STOPPED" (
     exit goto :stopSuccess 
    ) else (
     echo Checking if the Source Agent service has stopped successfully.... 
     timeout 3 > nul 
    ) 
    ) 
) 

echo The service myService could not be stopped. 
goto :error 

:stopSuccess 
sc delete myService > nul 

Wenn ich versuche, mein .bat-Skript von cmd auszuführen, tut es nichts und cmd schließt sich. Offensichtlich ist der Name des Dienstes nicht myService, aber ich verwende ihn als Platzhalter für die Anonymität.Warum wird dieses Stapelscript nicht ausgeführt?

Ich möchte 5 Prüfungen im Abstand von 3 Sekunden durchführen, um zu sehen, ob der Dienst ordnungsgemäß gestoppt wurde. Dann benutze ich ein paar Anweisungen, um fortzufahren.

+1

Sie haben explizit einen EXIT-Befehl. Der 'GOTO: stopsuccess' wird nicht ausgeführt, da Sie EXIT davor verwenden. – Squashman

+1

Und nur damit Sie wissen, können Sie nicht zwangsweise aus einem FOR/L-Befehl ausbrechen. Es wird alle 5 Mal ausgeführt, unabhängig davon, ob die IF-Anweisung TRUE ist. – Squashman

Antwort

1
exit goto :stopSuccess 

Bedeutet "exit cmd", sobald "STOPPED" erkannt wurde, wird die Prozedur beendet.

Lassen Sie die 10 fallen und es wird wie erwartet auf gehen.

Verwandte Themen