• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BATのIF文について質問)

BATのIF文について質問

このQ&Aのポイント
  • BATのIF文について質問です
  • WindowsXP SP3 64Bitで簡単なBATを作成しましたが、ERRORLEVELが0の時処理がされません
  • 設定ファイルには「SERVER01」という文字が含まれており、FINDコマンドでは正しく文字列が見つかっているのに、なぜ処理されないのか教えてください

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

バッチファイルでは ( から ) の処理は ( に到達した時点で環境変数が展開され処理されます 簡単に言えば、()の中でsetした環境変数は、()を抜けてからしか有効にならないのです バッチファイルで以下を実行してみてください @echo off ( set MESSAGE=1回目のメッセージ echo 1回目 %MESSAGE% ) ( set MESSAGE=2回目のメッセージ echo 2回目 %MESSAGE% ) pause>NUL exit /b 解決方法ですが、 set MESSAGE=SEVER01の環境です の処理を()の外で、もっと上の方で行う(set LOGFILEの次行辺り)方法が簡単です 遅延環境変数の展開という機能もあり、こちらであれば()内でsetした環境変数を使えますので 気になったら調べてみてください

shapecat02
質問者

お礼

レス感謝です。 「遅延環境変数の展開」非常に参考になりました。 他会社からもらったBATには遅延環境変数が記述してあり なぞがようやくとけました。

その他の回答 (3)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.3

この手のものは、WSH、PowerShellで作成されることをお勧めします。内容が簡単かどうかではなく、それぞれのシェルやスクリプト実行環境で不得意な所があります。 で、問題の所ですが、No1の方を指示します。 また、回避方法ですが、「findが0意外の時」を拾うほうが確実に動作します。つまり、 @echo off if ERRORLEVEL == 1 (echo err) else (echo suc) ですね。findなどが何を返すか、微妙な所があり、全部のケースをためしてみましたか? その試した結果で、組む必要があります。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

実は「環境変数の展開時期の問題」だったりして. set /? でヘルプを見るといいかもよ.

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

>if %ERRORLEVEL% == 1 GOTO END >if %ERRORLEVEL% == 0 ( if ERRORLEVEL == 1 GOTO END if ERRORLEVEL == 0 ( のように%ERRORLEVEL%ではなくERRORLEVELではどうでしょうか

参考URL:
http://www.atmarkit.co.jp/fwin2k/operation/command006/command01.html

関連するQ&A