2017-03-03 21 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 

cmdから私の.batスクリプトをexectueしようとすると、何もせずにcmdが閉じます。明らかに、サービスの名前は実際にmyServiceではありませんが、私は匿名性のためのプレースホルダーとして使用しています。このバッチスクリプトはなぜ実行されませんか?

サービスが正常に停止したかどうかを確認するには、3秒間隔で5つのチェックを行います。次に、いくつかのgoto文を使用して処理を進めます。

+1

明示的にEXITコマンドがあります。 'GOTO:stopsuccess'はあなたの前にEXITを使っているので実行されません。 – Squashman

+1

あなたが知っている通り、FOR/Lコマンドを強制的に抜け出せません。 TRUEのIF文にかかわらず、5回実行されます。 – Squashman

答えて

1
exit goto :stopSuccess 

"終了"が検出されるとすぐに、この手順は終了します。この手順は終了します。

exitを削除すると、期待通りに:stopsuccessになります。

関連する問題