我想从批处理文件中运行控制台应用程序。实际上,控制台应用程序是从另一个批处理文件运行该应用程序可以采用两个命令行参数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
)
)
如果我将runconsolebatch.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中运行。
答案 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个字符的行应该需要附加代码。