Eu acho que essa é uma pergunta sobre escopo variável. Estou tentando entender por que a variável% average% pode conter algo diferente de "0" quando a linha echo average before %average%
é atingida.
Parece conter o valor da execução anterior através do loop. Ele também não é atualizado pelo seguinte set /a
e, portanto, permanece o mesmo em echo average after %average%
. A próxima execução ao redor do loop tem o valor correto da execução anterior - mas não desta vez.
@echo off
setlocal
set count=1
set four=0
set ping1=0
set ping2=0
set ping3=0
set ping4=0
set average=0
:loop
set pingtime=
set striptime=
@for /f "tokens=3 delims==" %%G in ('ping -n 1 8.8.8.8 ^| find "Reply from"') do set pingtime=%%G
rem set pingtime=time=100ms
echo "ping %pingtime%"
if "%pingtime%"=="" (
set striptime=6666
) else (
rem set striptime=%pingtime:~5,6%
rem echo "Strip1 %striptime%"
set striptime=%pingtime:ms TTL=%
echo Strip2=%striptime%
)
set ping%count%=%striptime%
@echo ping%count% time=%striptime%
echo %ping1% %ping2% %ping3% %ping4%
set /a count+=1
if %count%==5 (
set count=1
set four=1
)
rem echo "Four= %four%"
if %four%==1 (
set average=0
echo average before=%average%
echo %ping1% %ping2% %ping3% %ping4%
set /a average=%ping1%+%ping2%+%ping3%+%ping4%
echo average after=%average%
if %average% GTR 2500 (
set four=0
set ping1=0
set ping2=0
set ping3=0
set ping4=0
rasdial nextgdu /disconnect
rasdial nextgdu
rem | choice /c:ab /t:A,2 > NUL
)
)
goto loop
fonte