プロが教える店舗&オフィスのセキュリティ対策術

前回に引き続き問題発生です。
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.

A 回答 (7件)

echo %ERRORLEVEL% で表示されるのは環境変数"ERRORLEVEL"の値なのでは?


あるプログラムの状態結果(if文のerrorlevel)は
また違う値だと思います。

ということで、たぶん実際の結果(if errorlevel)は
"1"になっていると思います。
 =スクリプトは正常に動作している

この回答への補足

御回答ありがとうございます。
SETで確認したんですが、ERRORLEVELは無いみたいですが???
(何か勘違いしてますか私?)
ログオンスクリプトでNET USEやXCOPY等のエラーを返したいんですが
エラーでも(1でも0でも)決まったGOTOしか飛ばないんですよ。
そもそもERRORLEVELはすべてのエラーを返しているんでしょうか?

補足日時:2001/04/10 20:22
    • good
    • 0

質問に対する回答としては、先の回答者の方々の通りですよ。


実験もしてみました。
RJBASE さんは、1, 0 の逆順を、
コマンドラインの ECHO で試されたので、回答のように
GOTO で分岐してないだけではないでしょうか。

ちなみに、No5 の回答に驚いて、テストしてみたら、環境変数でも ERRORLEVEL
は定義できるんですね!
でも、echo %errorlevel% では環境変数の値がでますが、
if errorlevel は、環境変数には影響されませんでしたよ。
    • good
    • 0
この回答へのお礼

御回答ありがとうございました。

お礼日時:2001/04/11 12:39

質問の意図がイマイチ掴めないのですが、



IF %ERRORLEVEL%==0 ECHO 00000
IF %ERRORLEVEL%==1 ECHO 11111
IF %ERRORLEVEL%==2 ECHO 22222

この方法で分岐させるっていう手は無しですか?
    • good
    • 0
この回答へのお礼

御回答ありがとうございました。

お礼日時:2001/04/11 12:38

やりたいことが明確にわからんのでなんとも言えないが・・・・



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とか色々ためしたんですが

補足日時:2001/04/10 20:09
    • good
    • 0

回答#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
------------------------------

補足日時:2001/04/10 12:46
    • good
    • 0

遠い昔の記憶ですが...



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
に行っちゃいます。まいった。

補足日時:2001/04/10 12:41
    • good
    • 0

こんばんわぁ、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
を通ります。なぜでしょうか?

補足日時:2001/04/10 08:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!