- ベストアンサー
DOSコマンドについて
前回に引き続き問題発生です。 EROORLEVELが分岐しません。何故でしょう?(下例) ------------------------------------------ C:\>ECHO %ERRORLEVEL% 1 C:\>IF ERRORLEVEL 0 ECHO 0000 0000 C:\>IF ERRORLEVEL 1 ECHO 1111 1111 C:\>IF ERRORLEVEL 2 ECHO 22222 C:\> ------------------------------------------ 2は判断できているみたいなんですが0と1ではどちらもECHOしています。 ちなみに2・1・0のならびに変えても同じ様な結果です。 いろいろ調べてみたんですがわかりません。どなたか御教示ねがいます。 Microsoft(R) Windows NT DOS (C)Copyright Microsoft Corp 1990-1996.
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
echo %ERRORLEVEL% で表示されるのは環境変数"ERRORLEVEL"の値なのでは? あるプログラムの状態結果(if文のerrorlevel)は また違う値だと思います。 ということで、たぶん実際の結果(if errorlevel)は "1"になっていると思います。 =スクリプトは正常に動作している
その他の回答 (6)
- kob
- ベストアンサー率0% (0/4)
質問に対する回答としては、先の回答者の方々の通りですよ。 実験もしてみました。 RJBASE さんは、1, 0 の逆順を、 コマンドラインの ECHO で試されたので、回答のように GOTO で分岐してないだけではないでしょうか。 ちなみに、No5 の回答に驚いて、テストしてみたら、環境変数でも ERRORLEVEL は定義できるんですね! でも、echo %errorlevel% では環境変数の値がでますが、 if errorlevel は、環境変数には影響されませんでしたよ。
お礼
御回答ありがとうございました。
- shige1972
- ベストアンサー率35% (20/56)
質問の意図がイマイチ掴めないのですが、 IF %ERRORLEVEL%==0 ECHO 00000 IF %ERRORLEVEL%==1 ECHO 11111 IF %ERRORLEVEL%==2 ECHO 22222 この方法で分岐させるっていう手は無しですか?
お礼
御回答ありがとうございました。
- kokucho81
- ベストアンサー率61% (157/255)
やりたいことが明確にわからんのでなんとも言えないが・・・・ FOR %%P IN (0 1 2) DO IF ERRORLEVEL %%P GOTO CASE%P :CASE0 ECHO 0000 GOTO END :CASE1 ECHO 1111 GOTO END :CASE2 ECHO 22222 GOTO END :END 並列分岐の常套手法。
補足
御回答ありがとうございます。 この場合でもERRORLEVELが1でも0でもCASE1にGOTOしちゃいます。 XCOPYとかでエラーでているんですけど・・・copyとか色々ためしたんですが
回答#2の補足です。 正確な判定出力を期待するなら以下のような感じになるかな? (きたないスクリプトですが...^ ^;) ------------------------------ IF ERRORLEVEL 2 GOTO ECHO-2 IF ERRORLEVEL 1 GOTO ECHO-1 IF ERRORLEVEL 0 GOTO ECHO-0 :ECHO-2 ECHO 22222 GOTO END :ECHO-1 ECHO 1111 GOTO END :ECHO-0 ECHO 0000 GOTO END :END ------------------------------
補足
御回答ありがとうございます。 上記の場合、1でも0でもIF ERRORLEVEL 1 GOTO ECHO-1 に行っちゃいます。 ECHO %ERRORLEVEL% ---------------この時1でも0でもGOTO ECHO-1にかかる IF ERRORLEVEL 2 GOTO ECHO-2 IF ERRORLEVEL 1 GOTO ECHO-1 IF ERRORLEVEL 0 GOTO ECHO-0 :ECHO-2 ECHO 22222 GOTO END :ECHO-1 ECHO 1111 GOTO END :ECHO-0 ECHO 0000 GOTO END :END ------------------------------
遠い昔の記憶ですが... ErrorLevelの判定はたしか判定結果以下のもの全てにヒットだったと思います。 ですので、ErrorLevelが"1"の場合、"1"と"0"にヒットするって感じで。 ということで、ErrlrLevel判定を行うには、 IF ERRORLEVEL 2 ECHO 22222 IF ERRORLEVEL 1 ECHO 1111 IF ERRORLEVEL 0 ECHO 0000 と記述すればいいと思います。 ちょっと質問の意図と外れていたらすみません。
補足
御回答ありがとうございます。 しかしながら2・1・0でも0・1・2でも0・1でも1・0でも分岐しません。 間にECHO %ERRORLEVEL%を挿入し確認しているのですが・・・ 上記の場合、1でも0でもIF ERRORLEVEL 1 ECHO 1111 に行っちゃいます。まいった。
- Blackwingls
- ベストアンサー率44% (138/313)
こんばんわぁ、Blackwinglsです。 いまいち、おっしゃりたい事が理解できていませんが、 環境変数ERRORLEVELが1の時のみ、ECHO 1111 させたいって事でしょうか? だとすると以下のようにすればOKだと思うのですが・・・・ IF "%ERRORLEVEL%" == "0" ECHO 00000 IF "%ERRORLEVEL%" == "1" ECHO 11111 IF "%ERRORLEVEL%" == "2" ECHO 22222 外してたらごめんなさい(^^;) では(^.^)/~~~
補足
回答ありがとうございます。 しかしながら上記の場合は0でも1でも IF "%ERRORLEVEL%" == "1" ECHO 11111 を通ります。なぜでしょうか?
補足
御回答ありがとうございます。 SETで確認したんですが、ERRORLEVELは無いみたいですが??? (何か勘違いしてますか私?) ログオンスクリプトでNET USEやXCOPY等のエラーを返したいんですが エラーでも(1でも0でも)決まったGOTOしか飛ばないんですよ。 そもそもERRORLEVELはすべてのエラーを返しているんでしょうか?