List 批量列出映射和扫描

List 批量列出映射和扫描,list,batch-file,for-loop,element,List,Batch File,For Loop,Element,我知道批处理是一种糟糕的脚本语言,您对它的期望不高,但我认为这是可以做到的,但我不知道是否有更简单的方法。 我想循环遍历两个元素列表(相同编号),它们之间的连接类似于关联数组。我想要的是保留第一个列表中项目位置的引用,并从第二个列表中获取项目。也许这段代码可以更好地解释: SET Projects=(Project1 Project2 Project3) SET Files=(Project1.txt Project2.txt Project3.txt) for %%i in %Project

我知道批处理是一种糟糕的脚本语言,您对它的期望不高,但我认为这是可以做到的,但我不知道是否有更简单的方法。 我想循环遍历两个元素列表(相同编号),它们之间的连接类似于关联数组。我想要的是保留第一个列表中项目位置的引用,并从第二个列表中获取项目。也许这段代码可以更好地解释:

SET Projects=(Project1 Project2 Project3)
SET Files=(Project1.txt Project2.txt Project3.txt)

for %%i in %Projects% do (
    :: Get the corresponding value in Files like SET ProjectFile=Projects[%%i]
)

对于
Project1
我想要得到
Project1.txt
,对于
Project2
我想要
Project2.txt
等等。有什么诀窍或者更难的方法来实现这一点吗?

您可以在这里使用伪数组

首先,将这些文件分配给伪数组文件[0]…文件[2]。
然后为每个项目编号提取相关文件

@ECHO OFF
setlocal EnableDelayedExpansion
SET Projects=Project1 Project2 Project3
SET Files=Project1.txt Project2.txt Project3.txt

set /a file_n=0
for %%f in (%files%) do (
    set /a file_n+=1
    set "files[!file_n!]=%%f"
)

set proj=0
for %%p in (%Projects%) do (
    set /a proj+=1
    call set file=%%files[!proj!]%%
    echo !file!
)

现在我只需要找出如何获得一个特定的值(比如Project2对应的文件),这是一个规则问题。我想你的规则是每个项目有一个文件,两个列表的顺序是一样的。但也许最好为每个项目定义一个自己的文件列表,比如
set file\u project1=file1.c file2.c…
谢谢,我想这样更好