一个简单的dos批处理脚本......!按预期工作

时间:2012-04-25 13:39:23

标签: windows batch-file

@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。

2 个答案:

答案 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 (
)

或它不起作用。