[前の記事]« ( )内での環境変数を使った条件判断がうまく動かない
[次の記事]別プロセスで動作するバッチ間で環境変数を受け渡したい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「IF(結果の検査、条件分岐)」索引へ
▲カテゴリー「SET, PATH, %環境変数%」索引へ

[NT系]回数を確認しながらコマンドを実行し、成功したらループから抜ける処理

455.
for文のコマンドで処理分岐方法
2004年05月12日(水) 12時36分
にしやん
こんにちは。
初めて書き込みます。
今ちょっと困っています。
WINDOWS2000 Pro SP3でサービスが起動したか確認してから、その
サービスをnet stopコマンドで停止するというロジックを考えている
のですが、サービスの起動確認をどのバッチでできないものかと。
リソースキットのSCコマンドでできるのは確認できているのですが、
例えば、サービスが何らかの異常で、その確認を延々と続けてしまうの
は問題があるので、何回か(100回程度)確認して、上がっていない場合は処理を中断してしまおうと考えています。
考えた方法としてはfor文を使ったらできるのではないだろうか?と思っているのですが、for文の使い方が、どうもよくわからないのです。
すいません。コマンドに関しては、知識が薄いもので。
すいませんが、何かご存知の方がいらしたら、アドバイスをお願いします。
456.
Re:for文のコマンドで処理分岐方法
2004年05月12日(水) 14時16分
にしやん
私が考えた方法を書きます。
下記のバッチを10回繰り返せば、100回確認する事はできると思うのですが、理想として1回毎にサービスが起動しているか確認して、起動した時点で forの処理を抜けたいと考えています。1回だけ確認して、100行書けば済むのですが、あまりに馬鹿っぽいのでやりたくありません。
以上、よろしくお願いします。

:CHK1
for /L %%I in  (1,1,10) do E:\TEMP\SC QUERY Netlogon >E:\TEMP\STATE.TXT
FIND "STOPPED" E:\TEMP\STATE.TXT
IF %ERRORLEVEL% == 0 GOTO CHK2
IF %ERRORLEVEL% == 1 GOTO START
457.
Re2:for文のコマンドで処理分岐方法
2004年05月12日(水) 22時39分
YanaKen
にしやんさん

>1回毎にサービスが起動しているか確認して、起動した時点でforの処理を抜けたいと考えています。

 こんな感じでどうでしょうか。

:TEST.BAT
@ECHO OFF
 set COUNT=0

:REPEAT
 echo %COUNT%回めの試行を実行中。
 set /A COUNT=%COUNT% + 1
 if %COUNT%.==101. goto ABORT
 call ER1.BAT
rem ER1.BATはERRORLEVEL 1を返すダミーのバッチファイルです。

 if ERRORLEVEL 1 goto REPEAT
 goto ENDPHASE

:ABORT
 echo リトライ回数を越えたのでループを終了しました。

:ENDPHASE
 echo バッチ処理が終了しました。


:ER1.BAT
 EXIT /B 1

YanaKen
460.
Re2:for文のコマンドで処理分岐方法
2004年05月13日(木) 02時09分
oo
>私が考えた方法を書きます。
>下記のバッチを10回繰り返せば、100回確認する事はできると思うのですが、理想として1回毎にサービスが起動しているか確認して、起動した時点で forの処理を抜けたいと考えています。1回だけ確認して、100行書けば済むのですが、あまりに馬鹿っぽいのでやりたくありません。
>以上、よろしくお願いします。

>:CHK1
>for /L %%I in  (1,1,10) do E:\TEMP\SC QUERY Netlogon >E:\TEMP\STATE.TXT
>FIND "STOPPED" E:\TEMP\STATE.TXT
>IF %ERRORLEVEL% == 0 GOTO CHK2
>IF %ERRORLEVEL% == 1 GOTO START

SCコマンド出力にSTOPPEDの文字が無ければ起動しているので次の処理にすすむと解釈して、

for /L %%I in (1,1,100) do (
 E:\TEMP\SC QUERY Netlogon | FIND "STOPPED"
 IF ERRORLEVEL 1 GOTO next
)
起動が駄目だったときの処理
goto xxx

:next
起動できた時の処理

for do の ( ) 内で %ERRORLEVEL% を使うと、452 に YanaKenさんが書いている理由で駄目なので、% を使わない記法を使います。
461.
Re3:for文のコマンドで処理分岐方法
2004年05月13日(木) 09時30分
にしやん
おはようございます。
YanaKenさん、ooさん、早速のレスポンスありがとうございます。
感謝します。
では、ご教授頂いた方法を、よく理解してから試してみます。
後ほど、結果をご報告させて頂きます。
464.
Re4:for文のコマンドで処理分岐方法
2004年05月13日(木) 14時36分
にしやん
YanaKenさん、ooさんに教えて頂いた方法で、どの様に行うか上席と
検討させて頂きました。
今回の方法は何回目で起動できたか確認できるという点でYanaKenさん
に教えて頂いた環境変数にカウンタを持たせる方法を利用させて頂きま
す。
環境変数を使用して、あの様な事ができるとは思わなかったのでforを
使う事しか思い浮かびませんでした。ooさんforの利用方法も、今後使
う機会があると思い、大変勉強になりました。
YanaKenさん、ooさんありがとうございました。
 
 
 


カテゴリー「IF(結果の検査、条件分岐)」索引へ
カテゴリー「SET, PATH, %環境変数%」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年05月12日 11:20に投稿されたエントリーのページです。

ひとつ前の投稿は「( )内での環境変数を使った条件判断がうまく動かない」です。

次の投稿は「別プロセスで動作するバッチ間で環境変数を受け渡したい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート