BATCH:根据标识符搜索CSV,然后将行存储到变量

时间:2017-06-15 19:58:39

标签: loops csv parsing batch-file

如果此条件为真,我希望使用Batch基于给定输入(例如33355 = ID)搜索CSV文档,然后将行数据存储到变量中,例如(Mike = Name)和(C:\ Name \ 222 = path)。

到目前为止,我已设法将CSV的每一行存储到变量(var0-var999)中。 For循环遍历电子表格中的每一行,并为每一行分配一个变量,例如%VAR1%...%VARN%。给出行号,例如VAR2,分成变量(A,B,C)但是我仍然坚持如何基于标识符实现CSV搜索功能。

下面的屏幕截图是我的电子表格中包含的内容的一个小示例。最多有三列,大约有1500行。第一列将包含人员的ID,第二列将是名称,第三列将是本地文件夹的路径。

Excel

CSV目录

ID,Name,Path
9353,Lol,C:\Name\lol
33355,222,C:\Name\222
5533,ABC,C:\Name\ABC

BATCH SCRIPT

@echo off
setlocal ENABLEDELAYEDEXPANSION
set test=0
for /F "tokens=*" %%A in (C:\Users\COMMON\Desktop\test\test.csv) do (
    SET /A test=!test! + 1
    set var!test!=%%A
)
set var
REM set list=%VAR2%

FOR /f "tokens=1-3 delims=," %%a IN ("%VAR2%") DO (
   set a=%%a
   set b=%%b
   set c=%%c
)

ECHO %c%

PAUSE

Command

我面临的第二个挑战是我的主要Excel电子表格包含超过1000条记录。使用Batch脚本我可以看到在存储999个变量后执行暂停。基于输出,我不相信解析和存储每一行​​到变量是执行我的要求的最有效方式。

感谢您的意见和反馈,等待您的回复。

非常感谢!

宣言

1 个答案:

答案 0 :(得分:1)

像这样的东西会这样做。注意我已将目标ID设置为此示例的固定值;我也在你的问题中假设CSV文件。在实践中,您可能会将id作为.bat文件参数提供。

@echo off& setlocal

set id=33355

for /f "tokens=*" %%a in (test.csv) do (
  for /f "tokens=1-3 delims=," %%b in ("%%a") do (
      if %%b==%id% set name=%%c & set pth=%%d
  )
)

echo id=%id%, name=%name%, pth=%pth%
pause