- ベストアンサー
PowerShell ファイル連結&出力方法
PowerShellについてお教え下さい。Cドライブ直下に100のCSVファイルがあります。ヘッダーがある為、全CSVファイルの2行目以降を連結させて1ファイルを作りたいと思っています。 そこで下記のようなスクリプトを書きました。 Get-ChildItem $path | % {Get-Content $_ | Select-Object -Skip 1} > xxx.csv しかし、xxx.csvにデータは出力されるのですが、ループ状態に陥ってしまいファイル容量がどんどん増えていってしまいます。これを解決するにはどのようにしたらよいでしょうか? よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>ループ状態に陥ってしまい リダイレクト先が「読み込んでいるcsvファイルと同じ場所で、拡張子がcsv」なのが原因。 「> xxx.csv」ってやってるから、ファイルを順に処理していく最中に「xxx.csvが読み込み対象にされてしまう」のです。 xxx.csvが読み込み対象にされてしまうと「xxx.csvから読んで、xxx.csvに書き足す」って事になるので、「HDDが空き容量不足で書き込みが出来なくなる」と言う状態になるまで、xxx.csvの読み込みが終了しません。 これを解決するには ・リダイレクト先のファイル名を、入力対象にならない名前にする。 例えば「> xxx.tmp」などのように、リダイレクト先のファイル名をcsvじゃないファイル名にして、全ファイルの処理が終わってから「xxx.tmp」を「xxx.csv」にリネームする(xxx.tmpは拡張子がcsvじゃないから入力には使われない) ・リダイレクト先のフォルダ位置を、入力対象にならない位置にする。 例えば「> ..\xxx.csv」のように、リダイレクト先のフォルダ位置を「1つ上のフォルダ」にする(xxx.csvはフォルダが違うから入力には使われない) などの対処が必要です。
お礼
ご回答ありがとうございます。わかってしまうと単純なことですが、そんなことがわからなく悩んでいました。拡張子を変更することにより無事に解決しました!ありがとうございました!