我计划编写一个批处理脚本,其中我需要逐个扫描 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 文件: