如果此条件为真,我希望使用Batch基于给定输入(例如33355 = ID)搜索CSV文档,然后将行数据存储到变量中,例如(Mike = Name)和(C:\ Name \ 222 = path)。
到目前为止,我已设法将CSV的每一行存储到变量(var0-var999)中。 For循环遍历电子表格中的每一行,并为每一行分配一个变量,例如%VAR1%...%VARN%。给出行号,例如VAR2,分成变量(A,B,C)但是我仍然坚持如何基于标识符实现CSV搜索功能。
下面的屏幕截图是我的电子表格中包含的内容的一个小示例。最多有三列,大约有1500行。第一列将包含人员的ID,第二列将是名称,第三列将是本地文件夹的路径。
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
我面临的第二个挑战是我的主要Excel电子表格包含超过1000条记录。使用Batch脚本我可以看到在存储999个变量后执行暂停。基于输出,我不相信解析和存储每一行到变量是执行我的要求的最有效方式。
感谢您的意见和反馈,等待您的回复。
非常感谢!
宣言
答案 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