具有嵌套循环和EnableDelayedExpansion的批处理文件

时间:2015-02-26 12:05:10

标签: windows batch-file command-line cmd

我正在尝试编写一个批处理文件,以便在多个环境中的多个服务器上执行操作。

在得到答案here之后,我已经设法能够循环遍历这些环境但是在那些环境中循环通过服务器后停滞不前。

给出以下脚本:

@echo off
set Environments=DEV01,DEV02,TST01,TST02,UAT01,UAT02

set SERVER_DEV01=DEV01SERVER01
set SERVER_DEV02=DEV02SERVER01
set SERVER_TST01=TST01SERVER01
set SERVER_TST02=TST02SERVER01
set SERVER_UAT01=UAT01SERVER01,UAT01SERVER02
set SERVER_UAT02=UAT02SERVER01,UAT02SERVER02

setlocal EnableDelayedExpansion 
(
    for /d %%e in (%Environments%) do (

        set servers=SERVER_%%e

        for /d %%s in (!servers!) do (
            echo !%%s!
        )
    )
)
endlocal

我期待输出为:

DEV01SERVER01
DEV02SERVER01
TST01SERVER01
TST02SERVER01
UAT01SERVER01
UAT01SERVER02
UAT02SERVER01
UAT02SERVER02

但是我得到了:

DEV01SERVER01
DEV02SERVER01
TST01SERVER01
TST02SERVER01
UAT01SERVER01,UAT01SERVER02
UAT02SERVER01,UAT02SERVER02

如何获得所需的输出?

1 个答案:

答案 0 :(得分:2)

您需要将变量的值向下解析一级。尝试

    for %%n in (!servers!) do (
        for %%s in (!%%n!) do (
           echo %%s
        )
    )