【问题标题】:nested for loops with variable used in the nested loop windows batch嵌套循环窗口批处理中使用的变量嵌套 for 循环
【发布时间】:2015-09-03 08:16:47
【问题描述】:

我有第一个循环和第二个循环,但第一个循环中的变量在第二个循环中始终保持不变。如何获得第二个循环的实际值?

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%"

所以不知何故,从第二个开始,最快的响应就不会被填充,因为该值始终是 999999999 毫秒。

已经感谢您的提示/帮助回答

【问题讨论】:

  • 你需要延迟扩展

标签: windows loops batch-file for-loop nested


【解决方案1】:

试试这个:

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

更多info about delayed expansion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2016-01-11
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多