コマンドプロンプトやPowerShellでCSVファイルからデータを取り出す方法

コマンドプロンプトやPowerShellでCSVファイルからデータを取り出す方法

Windows環境でコマンドプロンプト(バッチファイル)やPowerShell(スクリプト)を使って処理を行う場合に、CSV形式などのテキストファイルから目的のデータを抽出して、そのデータを基にして処理を行いたいときがあります。

そこでここでは、バッチファイルとPowershellスクリプトのそれぞれでCSV形式ファイルから目的のデータを抽出する方法を解説します。

ここからは、以下のような住所録のCSVファイルから目的のデータを取り出す方法を解説します。

No,name,hurigana,tel,postnum,address
1,本多 悠里,ホンダ ユリ,022-784-0759,981-3301,宮城県黒川郡富谷町志戸田1-12-2
2,須藤 るり子,ストウ ルリコ,03-3195-8162,114-0012,東京都北区田端新町1-4-3
3,高井 礼,タカイ レイ,0859-71-5822,684-0065,鳥取県境港市森岡町2-6-9 コンフォート森岡町 1003号室
4,武藤 十四夫,ムトウ トシオ,0599-69-1822,517-0025,三重県鳥羽市浦村町2-2-4 ローレル浦村町 4F
5,中西 酉蔵,ナカニシ トリゾウ,0776-25-5212,919-0303,福井県福井市岩倉町8-6-3 パークハイツ岩倉町 4階
6,下田 玲奈,シモダ レイナ,0248-30-9331,969-0237,福島県西白河郡矢吹町牡丹平8-2-5
7,及川 倉美,オイカワ クラミ,0748-42-9043,528-0020,滋賀県甲賀市水口町的場2-6-1
8,早川 邦美,ハヤカワ クニミ,0569-81-9457,475-0073,愛知県半田市美原町5-3-1 エスポワール美原町 513
9,小山 宏侑,オヤマ ヒロユキ,0833-51-9133,743-0062,山口県光市立野2-10-6 シャルム立野 11階
10,河野 亜由美,コウノ アユミ,04-4379-6623,299-2713,千葉県南房総市和田町松田3-7-1

CSVファイルから順にデータを取り出す場合

CSVファイルを基にして処理を行う場合、最もよくあるケースはCSVファイルから順にデータを取り出すケースです。

バッチファイルの場合

バッチファイルで、上のCSVファイルの行頭から順に氏名とフリガナのデータを取り出したいときは、以下のように記述します。

@echo off

for /f "skip=1 tokens=2,3 delims=," %%i in (E:\test\sample.csv) do (
  echo 氏名:%%i
  echo フリガナ:%%j
)

Windowsのforコマンドでは、デフォルトで認識してくれる区切り文字が半角スペースもしくはタブのため、カンマを区切り文字とする場合は「delimis=,」と記述する必要があります。

作成したバッチファイルを実行すると、以下のようにCSVファイルから氏名とフリガナだけを取り出すことができます。

氏名:本多 悠里
フリガナ:ホンダ ユリ
氏名:須藤 るり子
フリガナ:ストウ ルリコ
氏名:高井 礼
フリガナ:タカイ レイ
氏名:武藤 十四夫
フリガナ:ムトウ トシオ
氏名:中西 酉蔵
フリガナ:ナカニシ トリゾウ
氏名:下田 玲奈
フリガナ:シモダ レイナ
氏名:及川 倉美
フリガナ:オイカワ クラミ
氏名:早川 邦美
フリガナ:ハヤカワ クニミ
氏名:小山 宏侑
フリガナ:オヤマ ヒロユキ
氏名:河野 亜由美
フリガナ:コウノ アユミ

PowerShellスクリプトの場合

PowerShellで、上のCSVファイルから氏名とフリガナのデータを取り出したいときは、以下のように記述します。

Import-CSV "E:\test\sample.csv" -encoding oem | ForEach-Object {
  Write-Host "氏名:"$_.name
  Write-Host "フリガナ:"$_.hurigana
}

CSVファイルから目的のデータだけを取り出す

CSVファイルを基にして処理を行う場合、もう一つよくあるケースとしては特定の条件に一致するデータだけを取り出すケースです。

バッチファイルの場合

バッチファイルで、上記のCSVファイルから早川さんの住所データを取り出したいときは、以下のように記述します。

@echo off

rem 早川さんの住所を取り出す
for /f "usebackq tokens=2,6 delims=," %%i in (`findstr "早川" E:\test\sample.csv`) do (
echo 住所:%%j
)

作成したバッチファイルを実行すると、以下のようにCSVファイルから早川さんの住所だけを取り出すことができます。

住所:愛知県半田市美原町5-3-1 エスポワール美原町 513

PowerShellスクリプトの場合

PowerShellスクリプトで、上記のCSVファイルから早川さんの住所データを取り出したいときは、以下のように記述します。

$out = Import-Csv "E:\test\sample.csv" -encoding oem | Where-Object { $_.name -like "早川*" }
Write-Host "住所:"$out.address

あとがき

バッチファイルやPowerShellスクリプトを使って、Windows上で様々な処理を行う場合、CSVファイルなどのテキストファイルのデータを基にして処理を実行したいケースが結構あります。

そのようなときに、ここで紹介しているようにCSVから順にデータを取り出す、CSVから必要なデータだけを取り出す方法が使えれば、より高度なスクリプト処理が行えるようになるでしょう。