人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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桁の戻り値が数値として認識していないのではと思っていますが、
何故、上と下で結果が違うのか教えてください。

●質問者: kuruma_neko
●カテゴリ:コンピュータ
✍キーワード:DoS echo ng WindowsXP とある
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● aside
●35ポイント

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

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

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

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


2 ● rsc
●35ポイント

文字列として比較しているのではないでしょうか。"!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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ