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」を指定してください。
結果は横に長いので一部のみ表示しますが、 次のようにカンマ(,)区切りで書き込みされています。
"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
"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」 を指定することで表示されなくなります。