【PowerShell】複数のCSVファイルを1つのCSVファイルに纏める

PowerShellで
 ・複数のCSVファイルを
 ・1つのCSVファイルに纏める方法
を紹介します!

各CSVファイルに見出し行があっても、
上手いこと1つのCSVファイルに纏める方法です!

PR

コード

ここでは例として
 ・デスクトップ配下のフォルダ「test」配下にある
 ・「対象ファイル(今回は全てCSVファイル)」を
 ・1つのCSVファイルに纏める方法
を紹介します。

フォルダ「test」配下のCSVファイル(3つ)
フォルダ「test」配下のCSVファイル(3つ)
001.csv
001.csv
002.csv
002.csv
003.csv
003.csv

上記の全てのCSVファイルには「見出し行」があります。

# 対象フォルダ
$targetFolder = "C:\Users\user\Desktop\test"
# 出力ファイルのパス
$outputFile = "C:\Users\user\Desktop\merge.csv"
# 1ファイル目かどうかを判定するためのカウンタ変数
$fileCount = 0

$ws = New-Object -ComObject Wscript.Shell

try
{
    # 既に出力ファイルが存在したら削除
    if (Test-Path $outputFile) {
        Remove-item -Force $outputFile -ErrorAction Stop
    }

    # 指定フォルダ配下のcsvファイルのリストを取得
    $fileList = (Get-ChildItem $targetFolder -Filter *.csv -File -ErrorAction Stop).FullName

    # csvファイルの数だけ繰り返し
    foreach($file in $fileList){
        # カウンタ変数をカウントアップ
        $fileCount = $fileCount + 1
        # 1ファイル目のみ、(1行目を含め)まるっと出力
        # 1ファイル目以外は、1行目を飛ばして1行ずつ出力
        if ($fileCount -eq 1) {  
            Get-Content $file | Out-File -Encoding default $outputFile
        } else {
            Get-Content $file | Select-Object -Skip 1 | Out-File -Encoding default $outputFile -Append
        }
    }

    $ws.popup("対象ファイルを1ファイルに纏めました。`n対象ファイル数:" + $fileCount)
}
catch
{
    $ws.popup("エラー : " + $PSItem)
}

「対象フォルダ」を指定します(2行目)。
「出力ファイルのパス」を指定します(4行目)。

既に「出力ファイル」が存在したら削除します(13~15行目)。

1ファイル目のみ、(1行目を含め)まるっと出力します(27行目)。
1ファイル目以外は、1行目(見出し行)を飛ばして1行ずつ出力します(29行目)。
※1ファイル目以外は「-Append」により追記にします。

処理結果をメッセージ出力します(33行目)。
※「`n」により文字列を改行しています。

PR

実行結果

複数のCSVファイルを1つのCSVファイルに纏めることができました。
見出し行も上手いことできました。

実行結果①
実行結果①
実行結果②
実行結果②
実行結果③
実行結果③
PR

参考①

上記のコードは以下の記事を参考にして作成しました。

●ファイルの存在確認


●ファイルの削除

PR

参考②

上記のコードで使用した以下の詳細は、公式サイトをご確認ください。

●「Get-ChildItem」コマンドレット


●「Get-Content」コマンドレット


●「Out-File」コマンドレット


●「Select-Object」コマンドレット

タイトルとURLをコピーしました