如何批量读取 CSV 文件特定列中的值?

如何批量读取 CSV 文件特定列中的值?

我计划编写一个批处理脚本,其中我需要逐个扫描 CSV 文件的特定列中的值并将它们存储在变量中以供进一步处理。

假设以下是 CSV 文件:

A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
A3 B3 C3 D3 E3
.. .. .. .. ..

我必须读取 D1,使用它的值执行命令,读取 D2,执行命令,等等。

如何实现这一点?

答案1

假设您有一个名为的空格分隔文件你的文件.csv,并且您想要读取第四列(D1),您应该执行以下命令:

for /F "tokens=4 delims= " %i in (yourfile.csv) do @echo %i

答案2

在 Windows 7 上,您可以使用 powershell 轻松解析 csv导入-Csv前任:

Import-Csv -Delimiter " " -Header a,b,c,d,e c:\the.csv | foreach{ Write-Host $_.d }

答案3

这是我编写的一个批处理文件,用于将我的所有域用户(几千个)的列表转储到一个文件中,每个文件一个用户名(顺序不重要)。由于“net group”命令将用户列表转储到三列(固定宽度),因此我在以下批处理文件中使用了“token”语法来执行此操作。

@echo off
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM Turns three-column output from NET GROUP command into a 
REM single column of domain usernames
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
SET NGCSV=UserList3Col.csv
SET NGCSVT1=UserList3Col.csv.temp1
SET NGCSVT2=UserList3Col.csv.temp2
SET NGFINAL=UserListFinal.txt
setlocal EnableDelayedExpansion
net group /domain "Domain Users" > %NGCSV%
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM Now strip out the crap
REM ...make a temporary copy
COPY %NGCSV% %NGCSVT2%
REM ...strip off the crap using alternating temp files
findstr /B /L /V /C:"The request" %NGCSVT2% > %NGCSVT1%
findstr /B /L /V /C:"Group name" %NGCSVT1% > %NGCSVT2%
findstr /B /L /V /C:"Comment" %NGCSVT2% > %NGCSVT1%
findstr /B /L /V /C:"Members" %NGCSVT1% > %NGCSVT2%
findstr /B /L /V /C:"-----" %NGCSVT2% > %NGCSVT1%
findstr /B /L /V /C:"The command" %NGCSVT1% > %NGCSVT2%
REM ...make the last temporary copy the final copy and clean up
COPY %NGCSVT2% %NGCSV%
DEL %NGCSVT1%
DEL %NGCSVT2%
REM * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
REM Now convert it all to one column
del %NGFINAL%
REM ...Column 1
for /F "tokens=1" %%A in (%NGCSV%) do @echo %%A >> %NGFINAL%
REM ...Column 2
for /F "tokens=2" %%A in (%NGCSV%) do @echo %%A >> %NGFINAL%
REM ...Column 3
for /F "tokens=3" %%A in (%NGCSV%) do @echo %%A >> %NGFINAL%

(请注意,此批处理文件无法处理用户名中的“!”字符,但这对我没什么影响。)

我还建议使用这篇文章: http://www.robvanderwoude.com/ntfortokens.php ...了解有关如何处理分隔符的更多信息。

答案4

查看有关此问题的答案...它不完全相同,但它会在批处理脚本中解析 csv 文件:

https://stackoverflow.com/questions/17473239/windows-batch-programming-reading-from-a-csv-file-and-extracting-certain-data

相关内容