現在の形式のスクリプト
@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 (生きている) と .30 および .46 がスキップされました。追加することにしました
echo %errorlevel%
ループの最後で、ここで何が起こっているかを確認してください。どうやら、すべての ping の後 %errorlevel% が明らかに 0 だったようです
ping -n %ipAddress%.%%i | find "TTL" >nul
私の問題があるところです。このステートメントによると、10.167.194.22-.50 の間で 3 台のマシンのみが稼働しているすべての ping の後に "TTL" が検出されていますが、これは誤りです。
ところで、私がそうするとき
!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 チェックなしでスクリプトを試してみましたが、うまくいきました。私が提供したIPアドレスへのpingを開始し、.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>
そして、スクリプトは停止します。何か案は?