web-dev-qa-db-ja.com

バッチでCSVファイルの特定の列の値を読み取る方法は?

CSVファイルの特定の列の値を1つずつスキャンし、さらに処理するために変数に格納する必要があるバッチスクリプトを作成することを計画しています。

たとえば、CSVファイルは次のとおりです。

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

D1を読み取り、その値を使用してコマンドを実行し、D2を読み取り、コマンドを実行する必要があります。

これはどのように達成できますか?

1
Mandar Shinde

yourfile.csvという名前のスペース区切りファイルがあり、4番目の(D1)列を読み取りたい場合は、次のように実行する必要があります。

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

PowerShellを備えたWindows7では、 Import-Csv EX:を使用してcsvを簡単に解析できます。

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

これは、すべてのドメインユーザー(数千人)のリストをファイルごとに1つのユーザー名(順序は重要ではありません)でダンプするために作成したバッチファイルです。 「netgroup」コマンドはユーザーのリストを3列(固定幅)にダンプするため、次のバッチファイルで「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 ...区切り文字の処理方法の詳細については。

0
user87481