具有嵌套循环和 EnableDelayedExpansion 的批处理文件
Batch file with nested loops and EnableDelayedExpansion
我正在尝试编写批处理文件以在多个环境中跨多个服务器执行操作。
在遵循答案 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
如何获得我想要的输出?
您需要向下一级解析变量的值。尝试
for %%n in (!servers!) do (
for %%s in (!%%n!) do (
echo %%s
)
)
我正在尝试编写批处理文件以在多个环境中跨多个服务器执行操作。
在遵循答案 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
如何获得我想要的输出?
您需要向下一级解析变量的值。尝试
for %%n in (!servers!) do (
for %%s in (!%%n!) do (
echo %%s
)
)