2017-11-03 7 views
0

.batファイルを使用して約5つのWindowsサービスを開始または停止する必要があります。私は以下のことをしてきました。しかし、これを実行すると、エラー%xサービスが見つかりません。あなたのコードでWindowsサービスを起動または停止するには、

for %%x in (
"service 1" 
"service 2" 
"service 3" 
) do net start | find %%x > nul 2>&1 
if not .%errorlevel%.==.0. net start %%x >nul 
goto skip 

:skip 
pause 
+0

ここで私を助けることができますか? – MPK

+0

'SC QUERY'コマンドを使ってサービスの' STATE'をチェックすることもできます。 – Squashman

答えて

1
for %%x in (
"service 1" 
"service 2" 
"service 3" 
) do (
net start | find %%x > nul 2>&1 
if errorlevel 1 net start %%x >nul 
if errorlevel 1 goto skip 
) 

:skip 

、唯一の最初のnet startforループ内で実行されます。コマンドをcode block(かっこの並び順)に作成する必要があります。

欠点はcode blockが解析されるとき、が任意%var%がその時点で%var%の値によって置き換えられることです。

「エラーレベルがn 以上のnを超える場合」は、再試行するように見えるので、その命令がで実行されることを意味

したがって、あなたがerrorlevelのため、元の構文を使用する必要があり、if errorlevel nnet startの後にerrorlevel = 1 or moreの大文字小文字を再試行すると、再試行が失敗した場合はskipに行きたいと思っています。元の試行が成功した場合、errorlevel0(私は仮定します)ですので、ifは失敗し、ではなく、は再試行を実行するため、errorlevel0のままです。

+0

本当にありがとうございます。あなたのコードでは、errorlevel 1はサービスが開始されたので、スキップするように要求します。 – MPK

+0

@Magoo 2番目の 'net start'は再試行ではありません。実際にサービスを開始するのは初めてです。以前の 'net start'は、サービスがすでに実行されているかどうかを確認するクエリです。 –

+0

@Mounika 2番目の 'errorlevel 1'はサービスを開始する際にエラーがあったことを意味し、ループを終了します。 –

関連する問題