如何在批处理中迭代两个列表

时间:2015-01-13 20:54:03

标签: windows batch-file

我想从批处理文件中运行控制台应用程序。实际上,控制台应用程序是从另一个批处理文件运行该应用程序可以采用两个命令行参数a和b。它们是文件名。我有两个文件列表,alist.txt和blist.txt,长度相同。我想,如果可能的话,像这样运行批处理:

FOR /F %%a in (alist.txt)  %%b in (blist.txt) do runconsolebatch.bat %%a %%b

但这不起作用。当我运行它时,我得到"%b此时出乎意料。"

如果我以某种方式筑巢,那就行不通。我可以将两个文件列表加入一个文件中......就像这样?

  file1A    file2A

  file1B    file2B

但我不确定如何将file1A分配给%a和file1B分配给%b,或者如果可能的话。

2015年4月12日:我认为这已经解决了。我甚至使用了我认为是正确的批处理文件,但它不起作用。我现在得到的是第一个输出线是正确的,其余的是这样的:

第一行正常工作。但即使DIR.TXT文件有5个条目且NAMES.TXT文件有3个条目,我只能再获得两行。这应该是15行输出。其余的输出是这样的:

G:\test>(
set /p "valueA="  
 runconsolebatch.bat !valueA! name1.txt 
)  

Command line: in=!valueA! name1.txt 

failure validating G:\test\source\!VALUEA!: file may not be correctly specified or doesn't exist. 

这是我使用的批处理文件:

@echo off
    setlocal enableextensions enabledelayedexpansion
    <"dir2.txt" (
        for /f "usebackq delims=" %%b in ("names.txt") do (
            set /p "valueA="
            runconsolebatch.bat !valueA! %%b
        )
    )

如果我将runco​​nsolebatch.bat更改为echo,那么我得到

echo !valueA!  %%b

我得到三行输出:dir2.txt的第一行和names.txt的第一行,第二行和第二行以及第三行和第三行。

出于某种原因,虽然这种情况一度有效,但现在还没有。这是我的批处理文件:

@echo off
setlocal enableextensions enabledelayedexpansion
<"blist.txt" (
    for /f "usebackq delims=" %%b in ("alist.txt") do (
        set /p "valueA="
        echo !valueA! %%b
    )
)

blist.txt是

1111
2222
3333
4444

和alist.txt是

AAAA
BBBB
CCCC

但批处理文件的输出是:

1111 AAAA
2222 BBBB
3333 CCCC

什么时候应该

1111 AAAA
1111 BBBB

毫无疑问,它是一个愚蠢的错字但是......什么?此外,这只是在常规用户命令shell中运行。

1 个答案:

答案 0 :(得分:5)

使用Blist.txt循环读取for,使用文件输入重定向和AList.txt命令读取set /p

@echo off
    setlocal enableextensions enabledelayedexpansion
    <"Alist.txt" (
        for /f "usebackq delims=" %%b in ("Blist.txt") do (
            set /p "valueA="
            echo !valueA! %%b
        )
    )

对于问题中指出的值,这应该有效。有问题的字符或长度超过1021个字符的行应该需要附加代码。