- ベストアンサー
BATのIF文について質問
- BATのIF文について質問です
- WindowsXP SP3 64Bitで簡単なBATを作成しましたが、ERRORLEVELが0の時処理がされません
- 設定ファイルには「SERVER01」という文字が含まれており、FINDコマンドでは正しく文字列が見つかっているのに、なぜ処理されないのか教えてください
- みんなの回答 (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した環境変数を使えますので 気になったら調べてみてください
その他の回答 (3)
- 0909union
- ベストアンサー率39% (325/818)
この手のものは、WSH、PowerShellで作成されることをお勧めします。内容が簡単かどうかではなく、それぞれのシェルやスクリプト実行環境で不得意な所があります。 で、問題の所ですが、No1の方を指示します。 また、回避方法ですが、「findが0意外の時」を拾うほうが確実に動作します。つまり、 @echo off if ERRORLEVEL == 1 (echo err) else (echo suc) ですね。findなどが何を返すか、微妙な所があり、全部のケースをためしてみましたか? その試した結果で、組む必要があります。
- Tacosan
- ベストアンサー率23% (3656/15482)
実は「環境変数の展開時期の問題」だったりして. set /? でヘルプを見るといいかもよ.
- SaKaKashi
- ベストアンサー率24% (755/3136)
>if %ERRORLEVEL% == 1 GOTO END >if %ERRORLEVEL% == 0 ( if ERRORLEVEL == 1 GOTO END if ERRORLEVEL == 0 ( のように%ERRORLEVEL%ではなくERRORLEVELではどうでしょうか
お礼
レス感謝です。 「遅延環境変数の展開」非常に参考になりました。 他会社からもらったBATには遅延環境変数が記述してあり なぞがようやくとけました。