当前形式的脚本
@echo on
setlocal EnableDelayedExpansion
set /p ipAddress="enter ip address: "
rem right now the loop is set to (1,1,50) for the sake of testing
for /l %%i in (1,1,50) do (
ping -n 1 %ipAddress%.%%i | find "TTL" > nul
if !errorlevel! == 0 (
deploy_mir.bat %ipAddress%.%%i
)
)
endlocal
然后在已知的在线主机(10.167.194.22)上运行它的结果是
C:\DOCUME~1\socuser2\MIR>test.bat
C:\DOCUME~1\socuser2\MIR>setlocal EnableDelayedExpansion
C:\DOCUME~1\socuser2\MIR>set /p ipAddress="enter ip address: "
enter ip address: 10.167.194
C:\DOCUME~1\socuser2\MIR>for /L %i in (22 1 50) do (
ping -n 1 10.167.194.%i | find "TTL" 1>nul
if !errorlevel! == 0 (deploy_mir.bat 10.167.194.%i )
)
C:\DOCUME~1\socuser2\MIR>(
ping -n 1 10.167.194.22 | find "TTL" 1>nul
if !errorlevel! == 0 (deploy_mir.bat 10.167.194.22 )
)
"Mir Agent deployment to: 10.167.194.22"
现在最后一行意味着 !errorlevel! == 0(即,确实找到了“TTL”)所以到目前为止,脚本似乎正在运行。然而,在下一个循环中, 10.167.194.23 (alive) 以及 .30 和 .46 被跳过。我决定添加
echo %errorlevel%
在循环结束时查看这里发生了什么。显然,在每次 ping %errorlevel% 为 0 之后如此清晰
ping -n %ipAddress%.%%i | find "TTL" >nul
是我的问题所在。根据这个说法,每次 ping 后都会发现“TTL”,这是错误的,在 10.167.194.22-.50 之间只有 3 台机器处于活动状态。
顺便说一句,当我这样做的时候
!errorlevel! == 0
这意味着什么?
这条线以下的所有内容截至 2012 年 4 月 26 日
So my new script looks like this
@echo on
set /p ipAddress="enter ip address: "
set i=
for /l %%i in (1,1,255) do (
ping -n 1 %ipAddress%.%%i> test.txt
find "TTL" test.txt
if %errorlevel% == 0 (
deploy_this.bat %ipaddress%.%%i
)
我首先尝试了没有 if errorlevel 检查的脚本,它运行良好。它开始 ping 我提供的 IP 地址并继续到 .2 .3 .4 .5 等等。
然而,一旦我添加了这个......
if %errorlevel% == 0 (
deploy_this.bat %ipaddress%.%%i
)
这就是发生的事情
C:\DOCUME~1\socuser2\MIR>test.bat
C:\DOCUME~1\socuser2\MIR>set /p ipAddress="enter ip address: "
enter ip address: 10.167.201
C:\DOCUME~1\socuser2\MIR>set i=
C:\DOCUME~1\socuser2\MIR>
脚本就停止了。有任何想法吗?