コマンドプロンプトでは
> copy *.csv output.csv
とするとカレントディレクトリ内のCSVを容赦なく結合できていましが、PowerShell で同じコマンドを打っても怒られてしまいます。
PowerShell で同じ事ができないかというとそんなことはなくて、Get-Contentコマンドを利用すると概ね同じ様な処理をすることができます。
> Get-Content *.csv > output.txt
最後にoutput.txt
をoutput.csv
に変更しておいてください。
Get-Content
コマンドでCSVファイルの中身を標準出力に出力する代わりに新しいCSVテキストファイルに送り込んでいるわけです。
Get-Content
コマンドにはcat
というエイリアスも割り当てられているので
> cat *.csv > output.txt
としても同じ結果が得られます。
この結合の方法ではCSVファイルだけではなく、テキストベースのファイルならなんでも結合できるので便利です。
ただし、構造化されているテキストファイルをむやみに結合すると、パーサーに突っ込んだときに正しい内容が表示されないことがあるのでその辺は注意が必要です。
##追記
コメント欄でご指摘をいただいた通り、最初の投稿のまま実行するとCSVを再帰的に取得・出力してしまい処理が終わりません。
出力先ファイルの拡張子を変更するか、他のフォルダに出力先ファイルを指定する必要があります。
どうしても同じフォルダにイッパツで作りたい場合はこんなコマンドでイケました。
結構めんどいですね…。
PS1> dir *.csv -name | % { cat $_ >> output.csv }
##さらに追記
CSVファイル名群を一回変数に入れておくと同じフォルダに結合したCSVを出力できますが、長くなってめんどいですね。
dir *.csv | sv csvArray;$csvArray | % { cat $_ } >> merged.csv
余談ですが、PowerShell のプロンプトからリダイレクトでテキストファイルを作ると文字のエンコードがUTF16LE-BOMとかになるのでOut-Fileで文字コード指定した方が不幸になりにくそうです。
dir *.csv | sv csvArray;$csvArray | % { cat $_ } | Out-File merged.csv -Encoding default