0
@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 给定 xxxx/24 中的所有 IP 地址。如果该地址的 ping 成功,它只应该执行 deploy_this.bat %ipAddress%.%%i 。但是,发生的事情是脚本只是简单地 ping 特定 /24 中的每个地址,无论它是否启动,都在执行 deploy_this.bat %ipAddress%.%%i。

4

2 回答 2

0

if errorlevel 0总是正确的,除非你得到一个否定的返回码(因为它检查错误级别是否为 0或更高)。你可能想要

if not errorlevel 1
于 2012-04-25T13:54:31.987 回答
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后跟 an 的语句else必须采用以下形式:

if <condition> (
) else (
)

否则将无法正常工作。

于 2012-04-25T14:07:53.110 回答