WindowsXPにてDOSバッチを作成しています。


とあるコマンドを実行した結果、ERRORLEVELが7以下は正常、7より大きいは異常という判定をしたいです。

コマンド実行結果が2が返ってきた場合、上:OK、下:OKです。
コマンド実行結果が16が返ってきた場合、上:NG、下:OKで上と下で結果がちがいます。

IF /I "!ERRORLEVEL!" LEQ "7" (ECHO OK) ELSE (ECHO NG)
IF /I %ERRORLEVEL% LEQ 7 (ECHO OK) ELSE (ECHO NG)

推測すると、2桁の戻り値が数値として認識していないのではと思っていますが、
何故、上と下で結果が違うのか教えてください。

回答の条件
  • 1人2回まで
  • 登録:2009/07/06 15:59:24
  • 終了:2009/07/06 23:53:20

回答(2件)

id:aside No.1

aside回答回数339ベストアンサー獲得回数312009/07/06 16:44:09

ポイント35pt

当方環境では16の場合上:OK、下:NGになります

原因は文字列として比較しているので、

16の一桁目、「1」と7の一桁目「7」を最初に比較して

「1」のほうが小さいので16でもOKになるようです。

id:rsc96074 No.2

rsc回答回数4392ベストアンサー獲得回数4022009/07/06 19:00:46

ポイント35pt

 文字列として比較しているのではないでしょうか。"!ERRORLEVEL!"を"%ERRORLEVEL%"に変えて、実験してみました。

test01.bat

------------------------------------------------------

set ERRORLEVEL=2

IF /I "!ERRORLEVEL!" LEQ "7" (ECHO OK) ELSE (ECHO NG)

IF /I %ERRORLEVEL% LEQ 7 (ECHO OK) ELSE (ECHO NG)

pause

------------------------------------------------------

実行結果

------------------------------------------------------

>set ERRORLEVEL=2

>IF /I "!ERRORLEVEL!" LEQ "7" (ECHO OK ) ELSE (ECHO NG )

OK

>IF /I 2 LEQ 7 (ECHO OK ) ELSE (ECHO NG )

OK

>pause

続行するには何かキーを押してください . . .

------------------------------------------------------

test02.bat

------------------------------------------------------

set ERRORLEVEL=2

IF /I "%ERRORLEVEL%" LEQ "7" (ECHO OK) ELSE (ECHO NG)

IF /I %ERRORLEVEL% LEQ 7 (ECHO OK) ELSE (ECHO NG)

pause

------------------------------------------------------

実行結果

------------------------------------------------------

>set ERRORLEVEL=2

>IF /I "2" LEQ "7" (ECHO OK ) ELSE (ECHO NG )

OK

>IF /I 2 LEQ 7 (ECHO OK ) ELSE (ECHO NG )

OK

>pause

続行するには何かキーを押してください . . .

------------------------------------------------------

test03.bat

------------------------------------------------------

set ERRORLEVEL=16

IF /I "%ERRORLEVEL%" LEQ "7" (ECHO OK) ELSE (ECHO NG)

IF /I %ERRORLEVEL% LEQ 7 (ECHO OK) ELSE (ECHO NG)

pause

------------------------------------------------------

実行結果

------------------------------------------------------

>set ERRORLEVEL=16

>IF /I "16" LEQ "7" (ECHO OK ) ELSE (ECHO NG )

OK

>IF /I 16 LEQ 7 (ECHO OK ) ELSE (ECHO NG )

NG

>pause

続行するには何かキーを押してください . . .

------------------------------------------------------

  • id:kuruma_neko
    上:OK、下:NGでした。失礼しました。
    やっぱり、文字として認識しているようですね。バッチをあまり書いたことがないのですが、
    DOSでも型変換があるのか気になっていました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません