Windows批处理:使用两个不同的列表循环

时间:2018-10-10 15:34:09

标签: batch-file

我有一个目录DIR1,DIR2 ... DIRn的列表,每个目录中都有一个文件:FILE1,FILE2,... FILEn。 我想在每个文件上启动一个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()的每个实例都选择正确的列表?

2 个答案:

答案 0 :(得分:1)

我最终用文本

创建了文件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

答案 1 :(得分:1)

@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个for循环来实现。

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

代码中的回显用于测试输出,可以替换 并根据需要使用实际命令。

相关问题