PowerShell: CSV・TSVファイルへの書き込み

PowerShellでCSVファイルやTSVファイルへの書き込みをするには、 Export-Csvコマンドレットを使います。 デフォルトではカンマ(,)区切りのCSVファイルですが、 Delimiterパラメータで区切り文字をタブ文字に指定することで TSVファイルへの書き込みもできます。

Export-Csvの書式

書式
Export-Csv ファイルパス -Delimiter 区切り文字 -Encoding 文字コード

ファイルパスには書き込むファイルを指定します。

-Delimiterパラメータで区切り文字を指定。 デフォルトはカンマ(,)、 タブ区切りにする場合は「`t」(バッククォート + t)を指定します。 カンマやタブ以外の任意の区切り文字も指定可能です。

-Encodingで文字コードを指定。 UTF-8で書き込む場合は「utf8」と指定し、 Windows環境でShilft-JISで書き込む場合は「oem」と指定します。 意図する文字コードで書き込めない場合は、 PowerShellのバージョンに応じた Export-CSVコマンドレットのオンラインヘルプを参照してください。
(「Get-Help Export-CSV -Online」と入力)

ファイルへの書き込み

Get-Dateコマンドレットの結果をCSVファイルに書き込みます。

Get-Date | Export-Csv test.csv -Encoding utf8

今回はCSVファイルなのでDelimieterは指定していませんが、 TSVファイルにする場合は「-Delimiter `t」を指定してください。

結果は横に長いので一部のみ表示しますが、 次のようにカンマ(,)区切りで書き込みされています。

test.csv
"DisplayHint","DateTime","Date","Day"
"DateTime","2022年3月4日 3:00:23","2022/03/04 0:00:00","4"

書き込みたい項目を限定する場合はSelect-Objectコマンドレットを使って 列を限定します。 次のコードではGet-Dateコマンドの「DateTime」と「DayOfWeek」だけを CSVファイルに書き込みます。

Get-Date | Select-Object DateTime,DayOfWeek| Export-Csv test.csv -Encoding utf8
test.csv
"DateTime","DayOfWeek"
"2022年3月4日 3:10:14","Friday"

追記する場合 -Append

デフォルトでは新しいファイルとして書き込みを行いますが、 既存のファイルに追記したい場合はスイッチパラメータ「-Append」を指定します。

Get-Date | Export-Csv test.csv -Append

上書きしたくない場合 -NoClobber

書き込むファイルが既に存在する場合、 デフォルトでは上書き保存します。 上書きしないようにするにはスイッチパラメータ 「-NoClobber」を指定します。 -NoClobberを指定すると、ファイルが既に存在する場合は 上書きされずにエラーが発生します。

Get-Date | Export-Csv test.csv -NoClobber

入力オブジェクト名を表示しない -NoTypeInformation

Import-Csvコマンドレットで読み込んだ結果を 加工してExport-Csvで書き込む場合に注意点があります。 この場合、次のように1行目にオブジェクトのデータ型が出力されます。

#TYPE System.Management.Automation.PSCustomObject
データ...

ほとんどの場合、この入力オブジェクト名の出力は必要ないと思います。 不要な場合はスイッチパラメータ「-NoTypeInformation」 を指定することで表示されなくなります。

PowerShell