批量嵌套循环

时间:2014-04-24 01:11:58

标签: loops batch-file for-loop nested

我看了很多线程,似乎无法解决我的问题。

我想要做的是使用两个列表来创建一个输出。

set Client_ID=BJCH,BORG,FGMS,SVIN,JEFF,NWIL
set PartNo=1,2,9,10,12,20

for %%A in (%Client_ID%) do (
    for %%B in (%PartNo%) do (
        echo %%A %%B 

        )
)

但我得到的输出是:

BJCH 1
BJCH 2
BJCH 9
BJCH 10
BJCH 12
BJCH 20
BORG 1
BORG 2
BORG 9
BORG 10
BORG 12
BORG 20
FGMS 1
FGMS 2
FGMS 9
etc........

我需要的是

BJCH 1
BORG 2
FGMS 9
SVIN 10
JEFF 12
NWIL 20

知道我做错了什么吗?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的两个列表是分隔的:如果您将一个for嵌套到另一个列表中,则乘以结果的数量。除非您将列表转换为两个arrays然后处理同一for中的两个数组,否则无法在同一for中处理两个列表,也就是说,处理具有相同索引的两个数组的元素。例如:

setlocal EnableDelayedExpansion

set Client_ID[1]=BJCH
set Client_ID[2]=BORG
etc...

set PartNo[1]=1
set PartNo[2]=2
etc...

for /L %%i in (1,1,6) do echo !Client_ID[%%i]! !PartNo[%%i]!

您也可以通过这种方式模拟以前的处理("具有相同索引的两个元素")

@echo off
setlocal EnableDelayedExpansion

set Client_ID=BJCH,BORG,FGMS,SVIN,JEFF,NWIL
set PartNo=1,2,9,10,12,20

set i=0
for %%A in (%Client_ID%) do (
   set /A i+=1, j=0
   for %%B in (%PartNo%) do (
      set /A j+=1
      if !i! equ !j! echo %%A %%B 
   )
)

编辑添加了输出示例

BJCH 1
BORG 2
FGMS 9
SVIN 10
JEFF 12
NWIL 20