PowerShellでフォルダ内にある複数のファイルを結合します。CSVファイルを結合する場合に便利なコマンドレットも紹介します。
Get-ChildItem:指定された場所からコンテンツを取得
Get-Content:コンテンツの内容を取得
Set-Content:新しいコンテンツに書き込む
Import-Csv:CSVコンテンツからテーブル形式オブジェクトを作成
Export-Csv:テーブル形式オブジェクトをcsvファイルに書き込む
フォルダ内のファイルの一覧を取得する
(1) Get-ChildItemコマンドでフォルダ内のファイルの一覧を取得します。
Get-ChildItem LAYBOR_LIST_*.csv
(2) カッコで囲んで .FullName を付けるとファイルをフルパスを取得できます。今回はこちらを使います。
(Get-ChildItem LAYBOR_LIST_*.csv).FullName
シンプルにファイルを結合する
(1) ファイル名の一覧を変数にセットします。
$files = (Get-ChildItem LAYBOR_LIST_*.csv -Recurse).FullName
(2) ファイルの内容を取得して(Get-Content)、新しいコンテンツに書き込みます(Set-Content)
Get-Content $files -Encoding utf8 | Set-Content ALL_LAYBOR_LIST.csv -Encoding utf8BOM
単純なファイルの結合であればこれでOKですが、見出し行がそのまま入ってしまっていますね。
CSVファイルを結合する
複数のCSVファイルを一つのCSVに結合するには、Import-Csv/Export-Csvコマンドを使う方法が簡単です。
(1) ファイル名の一覧を変数にセットします。ここまでは一緒。
$files = (Get-ChildItem LAYBOR_LIST_*.csv -Recurse).FullName
(2) CSV形式のデータからテーブル形式のオブジェクトを作成(Import-Csv)して、CSVファイルとして書き込みます(Export-Csv)
Import-Csv $files -Encoding utf8 | Export-Csv ALL_LAYBOR_LIST.csv -Encoding utf8BOM
今度は見出しは1行になりました。
※ ダブルクォーテーションで囲ってくれるのがお節介になる場合は、Export-Csvに -UseQuotes オプションをつけます。
Import-Csv $files -Encoding utf8 | Export-Csv ALL_LAYBOR_LIST.csv -Encoding utf8BOM -UseQuotes Never
ダブルクォーテーションが外れました。