• Excel
    【Excel】「列と行」のどっちが「縦か横」かわからなくなったときに覚えておくと便利なこと
    2012年8月6日
  • その他
    もうひたすら暑かった、2013年6月、台湾を台中→台北と観光(お仕事)してきた際のお話
    2013年7月20日
  • アイテム
    GoPro Session 開封の儀(動画あり)
    2016年7月6日
  • Excel
    【Excel】グラフの折れ線をなめらかに表示する方法 (Windows版)
    2018年2月5日
  • フィリピン
    海賊版のバッグ/電子製品/改造エンジニアが集うマニラの「グリーンヒルズ」がカオスで楽しすぎた(動画あり)
    2016年3月8日
  • Excel
    【Excel】非表示にしてしまったセルの一行目を再表示する方法
    2013年9月25日
  • Windows
    操作対象のサーバがラック上のどれだかわからなくなったときに使える確認方法【Windowsサーバ管理者向け】
    2014年9月30日
  • Excel
    【Excel】土日祝を除いた「営業日」だけの残り日付を表示する方法
    2017年7月23日
  • Excel
    【Excel】判定式がTRUEかFALSEかを表示させる簡単な関数 AND関数・OR関数・NOT関数
    2017年7月30日
  • Windows
    Windows10でキーマッピングツールを使ってみたがNGだった
    2015年8月22日
  • Excel
    【Excel】改ページプレビューの青線がドラッグで動かせなくなったら確認するべきこと
    2014年7月10日
  • コマンド
    【バッチ勉強】Windowsのダウンロードフォルダをスケジュールで定期的に削除する
    2014年11月26日
  • Windows
    Windows7のインストールメディア(ISO)がマイクロソフトから公式ダウンロードできるようになってます
    2015年3月1日
  • ニュージーランド
    【NZ】ニュージーランド・ノマドツアー その9 オアマル、ワナカ、そしてクイーンズタウン
    2017年3月30日
  • コマンド
    【Powershell】現在の日付と時刻をファイル名に指定する方法
    2014年12月26日
  • その他
    熱中症寸前! 猛暑のSummer Sonic 2013(8/11)に遊びに行ってきたお話
    2013年8月22日
  • 旅行
    ANA提携航空会社の航空券からマイルを登録する方法
    2016年4月3日
  • Excel
    【Excel Tips】セルの書式設定を開く、ふたつのショートカットキー
    2014年12月28日
  • Excel
    【Excel】データの平均値と中央値を求める関数 両者の違いと使い分けまとめ
    2017年7月10日
  • Windows
    コマンドプロンプトで名前にスペースが入ってるフォルダを指定する方法
    2013年4月5日
  • Windows
    Windows7のAero Snapをデュアルディスプレイでも使う方法
    2012年7月5日
  • タイ
    【タイ】ドンムアン空港→カオサンまで50バーツ! A4バスに乗ってみた
    2017年8月10日
  • iPhone
    こりゃロゴ画像作成に役立ち過ぎる! 撮影した写真からシャレたタイポグラフィーが追加出来るiPhoneアプリ『Typic』 しかも現在半額セール中!
    2013年10月2日
  • Mac
    【MacOS】容量を圧迫している大きなサイズのファイルを検索する方法(Sierra版)
    2017年4月15日
  • Webサイト
    このクオリティの写真素材が本当に完全二次使用OKなんですか! しかも商用までOKなんですか! やったー! 『Unsplash』というサイトがすばらしい。
    2014年2月13日
  • Windows
    レジストリキーのSIDからユーザアカウントを識別する方法
    2013年4月1日
  • コマンド
    【Powershell】実行時間や結果を含むコマンド実行履歴をCSVに出力する方法
    2015年9月29日
  • アイテム
    スマホ用レンズのサンプルをご提供いただいたので開封の儀 (割引クーポンコードあり)
    2016年5月5日
  • その他
    ちょっとしたExcelの利用なら無料の「Office Online」でもう必要十分すぎる件
    2015年3月30日
  • Windows
    【Windows10】キーマッピングツールを使ってキーコンフィグする方法
    2017年8月25日

BatFilename2014-0930-202521

引き続き、バッチのお勉強として、Windows内で稼働しているサービスの状態を取得して、それをIf文などの条件式で利用する方法について掲載しておきます。

例によって、僕自身が勉強中の身なので細かい指定で「もっとこうしたらいい」というのがあれば教えてください。 とりあえずはあくまで僕の備忘録を兼ねてのご紹介です。

スポンサードリンク

関連記事

ソース

@echo off

sc query W32Time | findstr STATE | findstr RUNNING > null
echo %errorlevel%

処理の内容

上記ソース内で行っている処理はこんな感じ。

サービスの状態を出力する

sc query [サービス名]

scコマンドはサービスへの状態確認や、設定変更を行うコマンドです。 sc query で、サービスの稼働状況を含めた状態が一覧表示されます。

コマンドを入力してみると出力結果はこんな感じ。

c:\>sc query W32Time

SERVICE_NAME: W32Time
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

この5行目のSTATE部分に現在のサービスの状態が表示されるので、この文字列の表示を使って判別します。

起動状態ではRUNNINGに、停止状態ではSTOPPEDと出力されるので、この文字列を判断材料にする感じです。

該当する行の該当する文字列があるかどうかを判断

sc query W32Time | findstr STATE | findstr RUNNING > null

scコマンドと一緒にfindstrコマンド(特定の文字列のみを出力)を使って、現在の状態がRUNNINGなのかSTOPPEDなのかを判断します。

findstrでは、文字列がヒットして出力した場合はエラーレベルを0、ヒットしなかった場合は1を返すので、これを使ってRUNNINGの場合は0を、STOPPEDの場合は1を返すというコマンドとして実行できます。

ちなみに > null の部分は出力内容を画面に表示させない方法です。 出力内容を、nullにリダイレクトするという処理ですね。

エラーレベルを表示

echo %errorlevel%

あとは、エラーレベルを表示するだけです。 エラーレベルには0か1の値が代入されているはずなので、この値をもとにIf文で条件分けすることもできます。

まとめ

  • sc queryコマンドでサービスの状態を取得する
  • findstrコマンドでサービス状態の文字列を取り込む
  • findstrのエラーレベルでサービス状態の判断をする

findstrコマンドのエラーレベルを使ってIF文で判断させるのは、割と他のコマンドでも流用できそうですね。 汎用性が高そうなので、いろんなバッチが作れそうです。