2017-06-15 38 views
2

如果此条件为真,则需要基于给定输入(例如33355 = ID)使用批量搜索CSV文档,然后将行数据存储到变量中。 (Mike = Name)和(C:\ Name \ 222 = path)。BATCH:根据标识符搜索CSV,然后将行存储到变量中

到目前为止,我已经设法将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 

批处理脚本

@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

我现在面临的第二个challange是我主要的Excel表格包含了超过1000条记录。使用批处理脚本,我可以看到存储999个变量后停止执行。根据输出结果,我不认为将每行分析并存储到变量中是执行我的要求的最有效方式。

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

非常感谢!

宣言

+1

我们需要在运行的电子表格中看到CSV内容,而不是文件的外观。我们需要确切地知道你想要以什么形式输出。我也希望在你发布的脚本中对变量'%VAR2%'进行解释。不要将该信息添加到评论或答案中,请使用编辑工具更新您的初始问题。 – Compo

回答

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 
+0

绝对的传说!谢谢大家,感谢您的帮助和支持! – Manifesto

相关问题