嵌套 for 循环,嵌套循环 windows 批处理中使用了变量
nested for loops with variable used in the nested loop windows batch
我有第一个循环和第二个循环,但第一个循环中的变量在第二个循环中始终保持不变。我如何获得第二个循环的实际值?
REM @echo off
set fastestserver=none
set fastestresponse=99999999ms
for /F "tokens=*" %%A in (fileservers.txt) do (
for /F "skip=8 tokens=9 delims= " %%B in ('ping -n 3 %%A') do (
echo %%A
echo %%B
set fastestresponse=%%B
set actualpingserver=%%B
if /I "%fastestresponse:~,-2%" GTR "%actualpingserver:~,-2%" (
set fastestresponse=%%B
set fastestserver=%%A
)
)
)
REM @echo on
echo %fastestserver%
echo %fastestresponse%
在 fileserver.txt 里面有一些服务器,每个服务器都被 ping 了,我想得到平均 ping,如果 ping 比之前的那个小,它应该替换 2 个变量(fastestserver,fastestresponse ).
现在的问题是,如果我调试脚本,它总是需要
if /I "%fastestresponse:~,-2%" LSS "%actualpingserver:~,-2%"
所以从第二个开始最快的响应不会被填充,因为值总是 999999999ms。
已经感谢 hint/helping 的回答
试试这个:
REM @echo off
setlocal enableDelayedExpansion
set fastestserver=none
set fastestresponse=99999999ms
for /F "tokens=*" %%A in (fileservers.txt) do (
for /F "skip=8 tokens=9 delims= " %%B in ('ping -n 3 %%A') do (
echo %%A
echo %%B
set actualpingserver=%%B
if /I "!fastestresponse:~,-2!" GTR "!actualpingserver:~,-2!" (
set fastestresponse=%%B
set fastestserver=%%A
)
)
)
REM @echo on
echo %fastestserver%
echo %fastestresponse%
endlocal
我有第一个循环和第二个循环,但第一个循环中的变量在第二个循环中始终保持不变。我如何获得第二个循环的实际值?
REM @echo off
set fastestserver=none
set fastestresponse=99999999ms
for /F "tokens=*" %%A in (fileservers.txt) do (
for /F "skip=8 tokens=9 delims= " %%B in ('ping -n 3 %%A') do (
echo %%A
echo %%B
set fastestresponse=%%B
set actualpingserver=%%B
if /I "%fastestresponse:~,-2%" GTR "%actualpingserver:~,-2%" (
set fastestresponse=%%B
set fastestserver=%%A
)
)
)
REM @echo on
echo %fastestserver%
echo %fastestresponse%
在 fileserver.txt 里面有一些服务器,每个服务器都被 ping 了,我想得到平均 ping,如果 ping 比之前的那个小,它应该替换 2 个变量(fastestserver,fastestresponse ).
现在的问题是,如果我调试脚本,它总是需要
if /I "%fastestresponse:~,-2%" LSS "%actualpingserver:~,-2%"
所以从第二个开始最快的响应不会被填充,因为值总是 999999999ms。
已经感谢 hint/helping 的回答
试试这个:
REM @echo off
setlocal enableDelayedExpansion
set fastestserver=none
set fastestresponse=99999999ms
for /F "tokens=*" %%A in (fileservers.txt) do (
for /F "skip=8 tokens=9 delims= " %%B in ('ping -n 3 %%A') do (
echo %%A
echo %%B
set actualpingserver=%%B
if /I "!fastestresponse:~,-2!" GTR "!actualpingserver:~,-2!" (
set fastestresponse=%%B
set fastestserver=%%A
)
)
)
REM @echo on
echo %fastestserver%
echo %fastestresponse%
endlocal