- ベストアンサー
Windowsバッチでサービス起動チェックを行う方法
- Windowsバッチでサービスが起動しているかどうかチェックし、処理分岐する方法について説明します。
- サービス起動チェックの結果が標準出力となるため、バッチプログラム内で結果を利用する方法についても解説します。
- サービス名が記載されたリストファイルを使用して、複数のサービスの起動状態をチェックする手順を紹介します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
"net start"の実行結果を一旦ファイルに出力してから、そのファイルの内容に対して"find"コマンドを使用してはどうでしょうか? 例えば、 @echo off setlocal EnableExtensions setlocal EnableDelayedExpansion set ListFilePath=Z:\WINDOWS\Temp\ServiceList.txt set ResultFilePath=Z:\WINDOWS\Temp\Result.txt net start > "%ResultFilePath%" for /f "usebackq tokens=*" %%a in ("%ListFilePath%") do ( for /f "tokens=*" %%b in ('find /c "%%a" "%ResultFilePath%"') do ( set Result=%%b echo !Result! ) ) 2つ目の"for"文中の"find"コマンドの実行結果が変数"%%b"に入ります。 なお、1つ目の"for"文のオプションに"usebackq"を入れたのは、"%ListFilePath%"に半角スペースが入っている場合を考慮したものです。 また、"for"文中で環境変数を参照すると、"for"文の実行前の値が参照されてしまうので、"!Result!"の形式で遅延環境変数の参照を使用しています。(そのため、3行目の"setlocal EnableDelayedExpansion"で遅延環境変数の参照を有効にしています。) "net start"の実行結果の出力がバッチファイル実行中にその都度変わるようなら、"net start"の実行結果の出力を1つ目の"for"文の後にすれば良いと思います。
お礼
ご回答、ありがとうございました。 大変すばらしいご回答で、参考にさせていただきました。