在csv中查找字符串并仅在该行上工作

时间:2013-12-13 00:24:44

标签: batch-file csv cmd find findstr

我有一个需要查看csv的批处理文件,并根据一个唯一的字符串找到一行,这是一个字母和数字的可变混合,应该由用户输入(很可能是由条形码扫描)

当前的csv设置如下:

学校,computerid,型号,序列,用户,访问

这些是标题,而不是实际数据。要搜索的变量是WorkstationID。任何建议都非常感谢。

我的整个代码如下:

@echo off
setlocal enabledelayedexpansion
Echo What is the students computer name?
set /p computerid=
findstr /i "%computerid%" "AccessElevations.csv" > %temp%\computer.txt
pause
FOR /F "tokens=1-6 delims=," %%a in (%temp%\computer.txt) DO (
set school=%%a
set Model=%%c
set Serial=%%d
set user=%%e
set access=%%f

谢谢,

托比

3 个答案:

答案 0 :(得分:0)

已编辑 - 要适应评论

@echo off
    setlocal enableextensions disabledelayedexpansion
    set "inputFile=AccessElevations.csv"
    set "computerID="
    set /p "computerID=What is the students computer name? "
    if not "%computerID%"=="" for /f "tokens=1-6 delims=," %%a in (
        'findstr.exe /i /r /c:"^[^,]*,%computerID%," "%inputFile%"'
    ) do (
        set "school=%%a"
        set "model=%%c"
        set "serial=%%d"
        set "user=%%e"
        set "access=%%f"
    )

    echo school : %school%
    echo model  : %model%
    echo serial : %serial%
    echo user   : %user%
    echo access : %access%

    rem clean
    endlocal

如果提供了computerID,findstr用于在指定文件的第二个字段(跳过第一个逗号,然后是计算机ID,然后是逗号)中找到此计算机ID。如果找到一行,for命令将使用逗号作为分隔符将其拆分。

答案 1 :(得分:0)

如果此deosn不帮助,请解释您遇到的问题以及错误消息。

@echo off
setlocal enabledelayedexpansion
Echo What is the students computer name?
set /p computerid=
findstr /i "%computerid%" "AccessElevations.csv" > "%temp%\computer.txt"
pause
FOR /F "usebackq tokens=1-6 delims=," %%a in ("%temp%\computer.txt") DO (
   set school=%%a
   set Model=%%c
   set Serial=%%d
   set user=%%e
   set access=%%f
)

答案 2 :(得分:0)

我最终能解决这个问题,谢谢大家的帮助。我通过将accessselevations.csv文件的格式更改为.txt来修复它。