我想使用三个环境变量设置级别、环境和版本,以使用不同的 lvl、env 和 ver 多次运行测试。 我已经有了三个环境变量(数组/列表),我可以从中读取要设置的所有三个值。
我想迭代三个列表以同时获取 lvl、env 和 ver。 我希望第一次运行时为 LVL1、ENV1、VER1,然后下次运行时为 LVL2、ENV2、VER2,依此类推。
我在命令窗口中设置了这些,我将在其中启动我的进程
set LVL_VAR=LVL1 LVL2 LVL3
set ENV_VAR=ENV1 ENV2 ENV3
set VER_VAR=VER1 VER2 VER3
我可以阅读这三个来获得lvl、env、ver 然后我需要在运行 RunTest.bat 之前将变量 LVL、ENV 和 VER 设置为 LVL1、ENV1 和 VER1 等
这是我尝试过的,嵌套循环,但我不知道如何限制第二个和第三个循环以正确设置它,或者是否有其他方法可以做到这一点。
@echo OFF
for %%L in (%LVL_VAR%) do call :for_lvl %%L
exit /b
:for_lvl
set LVL=%1
echo LVL %LVL%
for %%E in (%ENV_VAR%) do call :for_env %%E
exit /b
goto :cont
:cont
exit /b
:for_env
set ENV=%1
echo ENV %ENV%
for %%V in (%VER_VAR%) do call :for_ver %%V
goto :cont
:cont
exit /b
exit /b
:for_ver
set VER=%1
echo VER %VER%
echo =======================RunTest.bat===================
exit /b
我得到的明显输出是
LVL LVL1
ENV ENV1
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
ENV ENV2
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
ENV ENV3
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
LVL LVL2
ENV ENV1
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
ENV ENV2
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
ENV ENV3
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
LVL LVL3
ENV ENV1
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
ENV ENV2
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
ENV ENV3
VER VER1
=======================RunTest.bat===================
VER VER2
=======================RunTest.bat===================
VER VER3
=======================RunTest.bat===================
我需要它像这样
LVL LVL1
ENV ENV1
VER VER1
=======================RunTest.bat===================
LVL LVL2
ENV ENV2
VER VER2
=======================RunTest.bat===================
LVL LVL3
ENV ENV3
VER VER3
=======================RunTest.bat===================
如何限制我的迭代次数或者还有其他方法吗?
列表和数组是非常不同的东西。这些是列表:
set LVL_VAR=LVL1 LVL2 LVL3
set ENV_VAR=ENV1 ENV2 ENV3
set VER_VAR=VER1 VER2 VER3
您可以通过这种方式将列表转换为数组:
setlocal EnableDelayedExpansion
set n=0
for %%a in (%LVL_VAR%) do set /A n+=1 & set "LVL[!n!]=%%a"
set n=0
for %%a in (%ENV_VAR%) do set /A n+=1 & set "ENV[!n!]=%%a"
set n=0
for %%a in (%VER_VAR%) do set /A n+=1 & set "VER[!n!]=%%a"
rem Keep here the last value of %n%
...然后通过下标或者索引同时处理三个数组:
for /L %%i in (1,1,%n%) do (
echo LVL !LVL[%%i]!
echo ENV !ENV[%%i]!
echo VER !VER[%%i]!
echo =======================RunTest.bat===================
)
我建议您查看这个答案
根据描述,该任务的一个简单解决方案是:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LVL_VAR=LVL1 LVL2 LVL3"
set "ENV_VAR=ENV1 ENV2 ENV3"
set "VER_VAR=VER1 VER2 VER3"
(for /L %%I in (1,1,3) do call :RunTest %%I) & exit /B
:RunTest
for /F "tokens=%1" %%J in ("%LVL_VAR%") do set "LVL=%%J"
for /F "tokens=%1" %%J in ("%ENV_VAR%") do set "ENV=%%J"
for /F "tokens=%1" %%J in ("%VER_VAR%") do set "VER=%%J"
echo LVL %LVL%
echo ENV %ENV%
echo VER %VER%
echo =======================RunTest.bat===================
goto :EOF
四个
echo
命令行应替换为 call RunTest.bat
。还可以在三个 RunTest.bat
循环替换四个 for /F
命令行之后在此批处理文件中包含 echo
的代码,甚至可能包括 goto :EOF
以减少运行此批处理文件时的文件系统访问。
如果三个环境变量的三个值本身包含空格(如水平制表符或竖线),也可以使用不同的分隔符代替空格,如下所示:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LVL_VAR=LVL1|LVL2|LVL3"
set "ENV_VAR=ENV1|ENV2|ENV3"
set "VER_VAR=VER1|VER2|VER3"
(for /L %%I in (1,1,3) do call :RunTest %%I) & exit /B
:RunTest
for /F "tokens=%1 delims=|" %%J in ("%LVL_VAR%") do set "LVL=%%J"
for /F "tokens=%1 delims=|" %%J in ("%ENV_VAR%") do set "ENV=%%J"
for /F "tokens=%1 delims=|" %%J in ("%VER_VAR%") do set "VER=%%J"
echo LVL %LVL%
echo ENV %ENV%
echo VER %VER%
echo =======================RunTest.bat===================
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
call /?
echo /?
exit /?
for /?
goto /?
set /?
setlocal /?