Windows批处理迭代CSV列表并从第二个列表中选择

时间:2014-04-24 12:50:12

标签: list batch-file csv

我有一个项目列表和一个项目类型列表。我需要迭代项目类型列表,每次所选项目类型等于某个值,我需要从项目名称中获取I th 条目。例如:

项目名称:Project1,Project2,Project3

项目类型:web,ssis,ssis

我需要所有“ssis”项目,因此结果列表应为“Project2,Project3”。

我已经习惯了很多/但是我不知道如何在“for”迭代中获得“i”,所以我可以从第二个列表中选择相关的条目。我已经对此进行了搜索并在“for”中进入了杂草,但似乎无法得出答案。

如果有一种方法比“我”游戏效果更好。如果有一种方法可以在第一个列表中使用“for”,并从第二个列表中提取相关条目,那也很棒。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

基于现已删除的评论:

@ECHO OFF

SET projlist=Project1,Project2,Project3
SET projtypes=web,ssis,ssrs
SET /a ptr=1

SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%a IN (%projtypes%) DO (
  ECHO %%a
  SET index=1
  FOR %%b IN (%projlist%) DO (
    IF !index!==!ptr! ECHO %%b
    SET /A index+=1
  )
  SET /a ptr=ptr+1
  ECHO ----------------
)
ENDLOCAL

运行此命令会得到以下结果:

web
Project1
----------------
ssis
Project2
----------------
ssis
Project3
----------------

当然,您需要对其进行修改以满足您的确切需求。

答案 1 :(得分:0)

如果我理解正确,您希望分组属于同一项目类型的所有项目名称,并将结果显示为组列表。我采用了this post的答案,它匹配了两个列表的元素,并对其进行了修改以获得所需的组:

@echo off
setlocal EnableDelayedExpansion

set ProjectNames=Project1,Project2,Project3
set ProjectTypes=web,ssis,ssis

rem Group project names by type
set i=0
for %%A in (%ProjectTypes%) do (
   set /A i+=1, j=0
   for %%B in (%ProjectNames%) do (
      set /A j+=1
      if !i! equ !j! set NamesByType[%%A]=!NamesByType[%%A]!,%%B
   )
)

rem Show result
for /F "tokens=2,3 delims=[]=" %%a in ('set NamesByType[') do (
   set list=%%b
   echo Type %%a: !list:~1!
)

输出:

Type ssis: Project2,Project3
Type web: Project1

您还可以参考NamesByType array的特定元素,例如:

echo %NamesByType[ssis]%