在windows批处理文件中,如何同时循环2组

时间:2016-05-19 14:55:02

标签: batch-file

在windows批处理文件中,如果我有两个集合,我该如何同时循环它们(不是嵌套循环)?

  

SET A =(1,2,3)SET B =(A,B,C)

循环(1,A), (2,B), (3,C)对?

2 个答案:

答案 0 :(得分:4)

此方法可与任意数量的同时使用。

@echo off
setlocal EnableDelayedExpansion

set "A=1,2,3"
set "B=A,B,C"

rem Separate A set into individual array elements
set i=0
for %%a in (%A%) do (
   set /A i+=1
   set "A[!i!]=%%a"
)

rem Separate B set into individual array elements
set j=0
for %%b in (%B%) do (
   set /A j+=1
   set "B[!j!]=%%b"
)

if %i% neq %j% (
   echo A and B have not the same number of elements
   goto :EOF
)

for /L %%i in (1,1,%i%) do echo (!A[%%i]!,!B[%%i]!)

您可以在this post的批处理文件中阅读有关阵列管理的更多详细信息。

另一种可能更简单的方法:

@echo off
setlocal EnableDelayedExpansion

set "A=1,2,3"
set "B=A,B,C"

(for %%a in (%A%) do echo %%a) > A.txt
< A.txt (
   for %%b in (%B%) do (
      set /P "A="
      echo [!A!,%%b]
   )
)

答案 1 :(得分:2)

@echo off
set "A=1,2,3"
set "B=A,B,C"
setlocal enableDelayedExpansion
set f1=0
set f2=0
for %%Z in (%A%) do (
   set /a f1=f1+1
   for %%Y in (%B%) do (
      set /a f2=f2+1
      if  !f1! == !f2! (
         echo [%%Z,%%Y]        
      )
   )
   set f2=0  
)

没有一些嵌套就无法完成。我更喜欢矩形托架,以避免与正常托架一起逃脱。