PowerShellでフォルダ内のファイルを結合する

PowerShellでフォルダ内にある複数のファイルを結合します。CSVファイルを結合する場合に便利なコマンドレットも紹介します。
 Get-ChildItem:指定された場所からコンテンツを取得
 Get-Content:コンテンツの内容を取得
 Set-Content:新しいコンテンツに書き込む
 Import-Csv:CSVコンテンツからテーブル形式オブジェクトを作成
 Export-Csv:テーブル形式オブジェクトをcsvファイルに書き込む

フォルダ内のファイルの一覧を取得する

(1) Get-ChildItemコマンドでフォルダ内のファイルの一覧を取得します。
 Get-ChildItem LAYBOR_LIST_*.csv

csj_join2

(2) カッコで囲んで .FullName を付けるとファイルをフルパスを取得できます。今回はこちらを使います。
 (Get-ChildItem LAYBOR_LIST_*.csv).FullName

csj_join3

シンプルにファイルを結合する

(1) ファイル名の一覧を変数にセットします。
 $files = (Get-ChildItem LAYBOR_LIST_*.csv -Recurse).FullName

csj_join1

(2) ファイルの内容を取得して(Get-Content)、新しいコンテンツに書き込みます(Set-Content)
 Get-Content $files -Encoding utf8 | Set-Content ALL_LAYBOR_LIST.csv -Encoding utf8BOM

csj_join4

単純なファイルの結合であればこれでOKですが、見出し行がそのまま入ってしまっていますね。

csj_join5

CSVファイルを結合する

複数のCSVファイルを一つのCSVに結合するには、Import-Csv/Export-Csvコマンドを使う方法が簡単です。

(1) ファイル名の一覧を変数にセットします。ここまでは一緒。
 $files = (Get-ChildItem LAYBOR_LIST_*.csv -Recurse).FullName

csj_join1

(2) CSV形式のデータからテーブル形式のオブジェクトを作成(Import-Csv)して、CSVファイルとして書き込みます(Export-Csv)
 Import-Csv $files -Encoding utf8 | Export-Csv ALL_LAYBOR_LIST.csv -Encoding utf8BOM

csj_join6

今度は見出しは1行になりました。

csj_join7

※ ダブルクォーテーションで囲ってくれるのがお節介になる場合は、Export-Csvに -UseQuotes オプションをつけます。
 Import-Csv $files -Encoding utf8 | Export-Csv ALL_LAYBOR_LIST.csv -Encoding utf8BOM -UseQuotes Never

csj_join8

ダブルクォーテーションが外れました。

csj_join9