904) 条件分岐 JOJI 2003/11/27(木) 14:41 |
|
はじめまして。 バッチ作成経験はなしなので皆様に御教授いただきたく 掲示板に書き込ませていただいています。 ・処理内容 test.log内に"AAA"という文字列があればkekka.logに 異常を書き込み、終了。 test.log内に"AAA"という文字列がなければkekka.logに 正常を書き込み、終了。 上記のような処理内容なのですが以下に作成したモジュールを 実行すると"AAA"の文字列あるなしに関わらず 「異常」の結果が返ってきます。 訂正個所を御教授願います。 宜しくお願いします。 ・モジュール FIND "AAA" test.log IF ERRORLEVEL 0 GOTO NG IF ERRORLEVEL 1 GOTO OK :NG echo 異常 > kekka.log GOTO END :OK echo 正常 > kekka.log GOTO END :END |
|
905) Re:条件分岐 JOJI 2003/11/27(木) 15:02 |
|
>はじめまして。 >バッチ作成経験はなしなので皆様に御教授いただきたく >掲示板に書き込ませていただいています。 > >・処理内容 >test.log内に"AAA"という文字列があればkekka.logに >異常を書き込み、終了。 >test.log内に"AAA"という文字列がなければkekka.logに >正常を書き込み、終了。 > >上記のような処理内容なのですが以下に作成したモジュールを >実行すると"AAA"の文字列あるなしに関わらず >「異常」の結果が返ってきます。 >訂正個所を御教授願います。 >宜しくお願いします。 > >・モジュール >FIND "AAA" test.log >IF ERRORLEVEL 0 GOTO NG >IF ERRORLEVEL 1 GOTO OK >:NG >echo 異常 > kekka.log >GOTO END >:OK >echo 正常 > kekka.log >GOTO END >:END すみません。 Windowsのバージョンを書き込むのを忘れていました。 windows2000professionalです。 |
|
906) Re:条件分岐 ふぇむ 2003/11/27(木) 15:02 |
|
>上記のような処理内容なのですが以下に作成したモジュールを >実行すると"AAA"の文字列あるなしに関わらず >「異常」の結果が返ってきます。 >訂正個所を御教授願います。 これはおそらく古典的なミスというかよくある誤解で、仕様として IF ERRORLEVEL の判定が「以上」であることが原因だと思います。等号じゃないんですね。 なので、 >IF ERRORLEVEL 0 GOTO NG >IF ERRORLEVEL 1 GOTO OK という順序で記述されると、最初の行は errorlevel が 1 の場合でも成り立ってしまって GOTO NG してしまうと思います。 IF ERRORLEVEL 1 GOTO OK IF ERRORLEVEL 0 GOTO NG というように、判定順序を数字の大きい方からにすればよいのではないでしょうか。 |
|
907) Re2:条件分岐 JOJI 2003/11/27(木) 15:31 |
|
早速のレスありがとうござます。 >これはおそらく古典的なミスというかよくある誤解で、仕様として IF ERRORLEVEL の判定が「以上」であることが原因だと思います。等号じゃないんですね。 > 純粋にERRORLEVELは「=」だと思っておりました。 > >IF ERRORLEVEL 1 GOTO OK >IF ERRORLEVEL 0 GOTO NG > >というように、判定順序を数字の大きい方からにすればよいのではないでしょうか。 > 上記のように訂正した所、正常に動作致しました。 今後ともお世話になると思いますが宜しくお願いします。 ありがとうございました。 |
|
974) Re:条件分岐 あっぴー 2003/12/16(火) 09:40 |
|
初カキコです。あっぴーと申します。 if /?でヘルプを見たところ、Win2000のコマンド拡張機能を使うと コマンド拡張機能を有効にすると、IF は次のように変更されます: IF [/I] 文字列1 比較演算子 文字列2 コマンド IF CMDEXTVERSION 番号 コマンド IF DEFINED 変数 コマンド 比較演算子は、次のいずれかです: EQU - 等しい NEQ - 等しくない LSS - より小さい LEQ - 以下 GTR - より大きい GEQ - 以上 とありました。 エラーレベルを以下のようにすると、一致でも判断できそうですね^^ IF %ERRORLEVEL% EQU 0 GOTO OK IF %ERRORLEVEL% EQU 1 GOTO NG |
|
975) Re2:条件分岐 ふぇむ 2003/12/16(火) 11:34 |
|
>エラーレベルを以下のようにすると、一致でも判断できそうですね^^ > >IF %ERRORLEVEL% EQU 0 GOTO OK >IF %ERRORLEVEL% EQU 1 GOTO NG 大小比較もできるわけなので、おっしゃる通り %errorlevel% を使えば IF ERRORLEVEL でできることはカバーできると思います(一致なら個人的には EQU より == の方が直感的にわかりやすくて好きです)。 %errorlevel% が使える環境においては、IF ERRORLEVEL の判定は %errorlevel% が使えなかった時代のなごりみたいなもの(もしくは互換性維持のためのもの)と思ってもよいかもですね。 |