ログイン
ユーザー名:

パスワード:


パスワード紛失  |新規登録
メインメニュー

"net start"による"対象サービス起動確認ツール"の作成。

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/9/3 18:21 | 最終変更
yrb  新米   投稿数: 12
こんばんは。
今回も宜しくお願いします。

batについての質問です。


【環境】
OS:Windows XP(個人PC)


今回は、"net start"についての質問なのですが、
これを実行する事で開始されているサービスの一覧が表示されると思います。

その開始サービス一覧から、ある特定のサービスだけの開始確認(自動判定)を行う事は、出来ますでしょうか?


この"net start"コマンドを利用して以下のような、"対象サービス起動確認ツール"を作成したいです。


*****Start_Check.bat*****

rem ?"net start"を実行し、開始したサービス一覧を確認。

net start >> L:\log\Start_Check.log


rem ?開始したサービス一覧の中で、対象サービスが開始されているか確認。
rem  (一覧から、対象サービスが開始されているのか、自動判定したいです)
rem  batの実行時に、"変数または引数(パラメータ設定)"で、対象サービスの指定を行いたいと思うのですが、可能でしょうか?
rem  (もし出来ない場合は、他の方法があるのでしょうか?)


rem ?自動判定後、
rem  対象サービスが開始されていた場合 ⇒ 開始メッセージの出力。(成功)
rem  対象サービスが停止されていた場合 ⇒ 失敗メッセージの出力。(エラー)
rem  (ログの出力先は、L:\log\Start_Check.logです)

*****Start_Check.bat*****


不明点が多く申し訳ございません。
お手数をお掛けしますが、ご教授を宜しくお願いします。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/9/3 21:32
のなもち  エキスパート 居住地: 東京  投稿数: 959
yrbさん、こんばんは

ざっと書いてみました。
何かの参考になれば。

検索対象はバッチ起動時に引数で与えます。
いくつでも行けるはず
ただし部分文字列検索をしていますので、サービスの文字列の中に
検索文字列が含まれていれば「発見」になります。

@echo off
:loop
if "%~1" == "" goto end
net start | findstr %1 > nul
if not errorlevel 1 goto found
echo %1 XXX 起動していません
shift
goto loop
:found
echo %1 == 起動しています
shift
goto loop
:end
echo 終了
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/9/5 20:43
yrb  新米   投稿数: 12
のなもちさん、返信が遅れてしまい申し訳ございませんでした。

丁寧な回答ありがとうございます。

とても参考になりました。

申し訳ないのですがまた二点、質問があります。

ご教授して頂いたロジック内の、

"net start | findstr %1 > nul
if not errorlevel 1 goto found"

というのは、どのような処理内容なのでしょうか?

また、回答内容の

"ただし部分文字列検索をしていますので、サービスの文字列の中に検索文字列が含まれていれば「発見」になります。"

というのは、どのような意味なのでしょうか?

簡単な概要で良いので、教えて頂いても宜しいでしょうか?

理解不足な上、再質問で大変申し訳ないです。

お時間がある時で宜しいので、ご確認をお願いします。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/9/5 21:57
のなもち  エキスパート 居住地: 東京  投稿数: 959
yrbさん、こんばんは

net start | findstr %1 > nul
これはパイプ処理です。
パイプ処理で検索をかけると何をしているのかがわかります。
もともとはUNIXが起源です。
findstrの処理内容はヘルプまたはネットで検索をかければ出てきます。
最後の > nulは付けた場合と外した場合の結果を比べてみてください。

if not errorlevel 1 goto found
直前のコマンドの実行結果の戻り値を判定し、次の処理を決めています。
errorlevelでの判定は前回のrobocopyでの課題でマスターしてませんか?

部分文字列と言う言葉をつかいましたが、例えば
windows
windows terminal process
と言う2つのサービスが走っていたとして、windowsで検索をかけると2つともひっかかりますよ、と言うことです。

ふと思ったんですが、robocopyでの質問も今回のnet startの質問も対象とするコマンドこそ違いますが、
内容そのものは実行結果を戻り値により判定し、それに基づき処理内容を振りわけると言う点においてはまさに共通しています。
なぁ〜〜んとなく、学校の課題(宿題)をやっている気がしてならないんですが(笑)

プログラミングは教わるものではなく、自ら覚えるものです。
人のコードを読む事は自分の技術を向上させるいい種になりますが、なぜそう言うコードを使っているのかは
自分で解析しないとダメですよ。
質問をするにしても、自分である程度いじってみて、どうしてもわからない部分について聞かないと。
これはyrbさんがプログラミングの上達を真に志している場合のアドバイスです。

もしそうではなく、例えば宿題の手伝いをして欲しいのであれば、そう言ってくれれば余計な事は言わずになんでも見せてあげます。

さて、どっちでしょう?(笑)
何をやろうとしているのか、ちょっと種明かしをしてみてもいいのでは?

逆に質問です。
今回はあえてログファイルを入力に使っていませんが、
例えば、まず始めにStart_Check.logと言うログファイルにnet startの結果をぶちこみ、
次にそのログファイルに対して検索をかけるとなると、私のコードのどこをどう修正すればいいですか?

とんでも無い事になっちゃいました?(笑)
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/9/7 22:29
yrb  新米   投稿数: 12
のなもちさん、こんばんは。

回答ありがとうございます。
また、各ロジックについての詳しい解説もして頂きありがとうございます。

のなもちさんの質問に対する回答です。
お恥ずかしい話で申し訳ないのですが、今は学生で先月から始めたプログラミングの事について勉強しています。
今回の質問は任意課題の内容で、自分のスキルアップのつもりで確認をして頂きました。(丸写しでは無いです)
一番下の、のなもちさんからの質問も考えてはいるのですが、今も答えが分からないのが現状です。

正直な所、この質問をする際も投稿するか迷ったりしてました。
ただ、このサイトの考え方についても凄く共感できる事も多かったので、結果として自分が甘えているのが分かった上で、このような投稿内容となってしまいました。

申し訳ございません。
同時に、のなもちさんのアドバイスやお気遣いには本当に感謝しています。

次回、質問をする時はそのような点に注意して、投稿したいと思います。(近い内に質問すると思いますが・・・)

今後も機会があると思いますが、その時はまた宜しくお願いします。

色々とありがとうございました。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/9/8 9:40
のなもち  エキスパート 居住地: 東京  投稿数: 959
yrbさん、
何も遠慮しないでドンドン質問していいんですよ。

自分で調べることもしないで質問するなとも言っている訳ではなく、
プログラミングに向き合う姿勢について言いたかっただけなんです。

「宿題を教えてくれ」ならそれでもいいんです。
でも、「宿題を教えてくれ」なのに「プログラミングを勉強中です」
みたいな姿勢を取られるのが嫌だっただけです。
(これはyrbさんに対してではなく、一般論としてです)

yrbさんのプログラミングに対する姿勢はわかりました。
これからもお手伝いする事があれば、何でも手伝います。
(って、もう続きが出てますね(笑))

  条件検索へ

Copyright 2019 alpha. All Rights Reserved.