@echo off
set /p ipAddress="enter Ip address"
:startOfScript
set i=
for /l %%i in (1,1,255) do (
ping -n 1 %ipAddress%.%%i | find "TTL"
if errorlevel 0 (
deploy_this.bat %ipAddress%.%%i
)
)
此脚本将ping给定x.x.x.x / 24中的所有IP地址。如果该地址的ping成功,它应该只执行deploy_this.bat%ipAddress%。%% i。然而,最新发生的是脚本只是ping该特定/ 24中的每个地址,无论它是否正常,执行deploy_this.bat%ipAddress%。%% i。
答案 0 :(得分:0)
if errorlevel 0
始终为true,除非您收到否定返回代码(因为它会检查错误级别为0 或更高)。你可能想要
if not errorlevel 1
答案 1 :(得分:0)
对于您的代码,它应该如下所示:
@echo off
for /L %%i in (1,1,255) do call :findit %%i
pause
goto :eof
:findit
PING -n 1 192.168.0.%1 | FIND "TTL" > nul
IF %errorlevel% == 0 (
echo up
) ELSE (
echo down
)
goto :eof
我怀疑errorlevel
无效,因为代码位于for
的代码块中,在提取并将其放入method
errorlevel
个触发器后正常。
在方法中有一个简单的ping
,其输出重定向为find
。
如果find找不到它正在搜索的字符串,它将返回一个非零errorlevel
,然后触发if
语句。
对于批处理文件,if
后跟else
的语句必须采用以下格式:
if <condition> (
) else (
)
或它不起作用。