Batch file windows批处理:使用两个不同列表循环

Batch file windows批处理:使用两个不同列表循环,batch-file,Batch File,我有目录DIR1,DIR2的列表。。。DIRn,每个文件中都有一个文件:FILE1,FILE2。。。菲伦。 我想对每个文件启动make: cd %%DIR1 make.exe %%FILE1 如果文件名始终相同,则很容易: for %%x in ( DIR1 DIR2 ... DIRn ) do ( cd %%DIR1 make.exe FILE rem my dirs are two levels deep cd ..\.. ) 有没有办法创建一个包含耦合元

我有目录DIR1,DIR2的列表。。。DIRn,每个文件中都有一个文件:FILE1,FILE2。。。菲伦。 我想对每个文件启动make:

cd %%DIR1
make.exe %%FILE1
如果文件名始终相同,则很容易:

for %%x in (
  DIR1
  DIR2
  ...
  DIRn
) do (
  cd %%DIR1
  make.exe FILE
  rem my dirs are two levels deep
  cd ..\..
)

有没有办法创建一个包含耦合元素的列表,以便do()的每个实例都选择正确的一个?

我最终创建了一个包含文本的EXAMPLE.TXT文件

DIR1 FILE1
DIR2 FILE2
...
DIRn FILEn
在这一点上,

for /F "eol=; tokens=1,2* " %%i in ( EXAMPLE.TXT ) do ( @echo %%i %%j )

运行所有行,将%%i设置为DIRx,将%%j设置为FILEx

我最终创建了一个包含文本的文件EXAMPLE.TXT

DIR1 FILE1
DIR2 FILE2
...
DIRn FILEn
@echo off
setlocal

for %%A in (
 "DIR1|FILE1"
 "DIR2|FILE2"
 "DIRn|FILEn"
) do for /f "tokens=1-2 delims=|" %%B in ("%%~A") do (
    echo pushd "%%~B"
    echo make "%%~C"
    echo popd
)
在这一点上,

for /F "eol=; tokens=1,2* " %%i in ( EXAMPLE.TXT ) do ( @echo %%i %%j )
运行所有行,将%%i设置为DIRx,将%%j设置为FILEx

@echo off
setlocal

for %%A in (
 "DIR1|FILE1"
 "DIR2|FILE2"
 "DIRn|FILEn"
) do for /f "tokens=1-2 delims=|" %%B in ("%%~A") do (
    echo pushd "%%~B"
    echo make "%%~C"
    echo popd
)
可以使用2个
进行
循环

DIRn
FILEn
可以使用分隔符配对,例如 路径中未使用的
|
。第一个循环将获得每个字符串 与双引号配对。第二个循环将字符串拆分为 2个
DIRn
string和
FILEn
string的标记

代码中的回声用于测试输出,可以替换 如果需要,使用实际命令

可以使用2个
进行
循环

DIRn
FILEn
可以使用分隔符配对,例如 路径中未使用的
|
。第一个循环将获得每个字符串 与双引号配对。第二个循环将字符串拆分为 2个
DIRn
string和
FILEn
string的标记

代码中的回声用于测试输出,可以替换
如果需要,使用实际命令。

我发现您实际上没有使用基于伪代码的批处理文件的经验。您必须提供一个比您提供的更好的示例。你说你有两张名单。第二张名单是什么?我假设第一个列表是您要处理的所有目录。请参阅
帮助以了解
,查看
以了解/L
。您是否提前知道
n
的值?据我所知,您没有两个列表。您有一个目录列表,并且希望在每个目录中创建一个文件,无论其名称如何。不是吗
for/D%%x in(*)do(
&
cd“%%x”
&
for%%f in(*)do make.exe“%%f”
&
cd..
&
@squashman:我对Windows批处理文件没有任何经验。在unix上,我可能会创建一个用分隔符连接元素的列表,并使用awk获取相关部分,但在我使用的上下文中,unix不是一个选项。我发现您几乎没有使用基于伪代码的批处理文件的经验。您必须提供一个比您提供的更好的示例。你说你有两张名单。第二张名单是什么?我假设第一个列表是您要处理的所有目录。请参阅
帮助以了解
,查看
以了解/L
。您是否提前知道
n
的值?据我所知,您没有两个列表。您有一个目录列表,并且希望在每个目录中创建一个文件,无论其名称如何。不是吗
for/D%%x in(*)do(
&
cd“%%x”
&
for%%f in(*)do make.exe“%%f”
&
cd..
&
@squashman:我对Windows批处理文件没有任何经验。在unix上,我可能会创建一个用分隔符连接元素的列表,并使用awk获取相关部分,但在我使用的上下文中,unix不是一个选项。