下記のようなコードでは、%ERRORLEVEL%は起動時に値が「0」で入ってしまい、途中では変化しない。
@ECHO ON
@ECHO OFF
::cmd.exe
SET NETADRS=%1
for /L %%i in (1,1,254) do (
CALL ping -l 0 -n 1 -a %NETADRS%.%%i
ECHO ERROR : %ERRORLEVEL%
IF %ERRORLEVEL%==0 ECHO FOUND %%i
)
ただしくは、以下のように「ERRORLEVEL」を裸で使用する。
IF ERRORLEVEL 0 ECHO FOUND %%i
ところが、これだといつでも「FOUND」となってしまう。調べると「 DOS コマンド一覧 > If 」にあるように、ERRORLEVELの指定はその数値以上という意味であった。
上記のコードではエラーレベルが0以上ならと解釈されていつでも実行することになった。正しくは、下記のようにする。
@ECHO OFF
REM search network ips with ping
::cmd.exe
SET NETADRS=%1
SET DSPNORES=%2
IF "%NETADRS%"=="" (
ECHO "usage: %0 NETADRS(xx.xx.xx) [DSPNORES]"
GOTO END
)
for /L %%i in (1,1,254) do (
ping -l 0 -n 1 -a %NETADRS%.%%i >:NULL
IF ERRORLEVEL 1 (
IF NOT "%DSPNORES%"=="" ECHO -NORES %NETADRS%.%%i
)ELSE ECHO +FOUND %NETADRS%.%%i
)
:END
@ECHO ON