none
PowerShellで複数のテキストファイルの内容全てをCSVファイルに出力する RRS feed

  • 質問

  • 複数のテキストファイルの内容全てをCSVファイルにファイル名(Filename),行(Line)をすべて出力させたいです。下記のSelect-Stringコマンドを利用して-NotMatchで適当な単語を入れて強引にテキストファイルの内容全てを出力させてますが、もうちょっとシンプルに上手くやる方法はないでしょうか?

    $val1="C:\temp\*.txt"
    $val2="C:\temp\list\file_list.csv"
    Select-String -Path $val1 -NotMatch -Pattern "適当な単語1","適当な単語2" -Enc default | select Filename,Line | EPCSV $val2 -nti -enc utf8
    2015年3月23日 14:33

すべての返信

  • チャブーンです。

    これですが、出力形式が[ファイル名],[内容の1行目]...[ファイル名],[内容のn行目]としないといけないのでしょうか?本当に特定ファイルの中身全体を単にCSVファイルに読みたい、という場合、ファイルの内容全体を配列変数の1要素に入れてしまう、という方法を採る気がします。複数行あるデータは-join "<改行に代わる連結文字>" で1行にしても、後で内容の判読は可能ですので。こんなような感じになるでしょうか?

    $Contents=Get-Childitem C:\Temp|Where {$_.extension -eq ".txt"}
    $Contents|Foreach {$_|Select Name,@{Name="Content";Expression={(Get-Content $_.fullname -Encoding Default) -join ";"}} | Export-CSV C:\Temp\list\file_list.csv -append -notype -encoding utf8}



    もし、どうしても、今までと同様の出力形式を採りたい場合は、以下のようにできます。Select-Stringは使いません。

    $Contents=Get-Childitem C:\Temp|Where {$_.extension -eq ".txt"}
    $Contents|Foreach {$Name=$_.Name;Get-Content $_.Fullname -Encoding Default|Foreach {$_|Select @{Name="Name";Expression={$Name}},@{Name="Line";Expression={$_}} | Export-CSV C:\Temp\list\file_list.csv -append -notype -encoding utf8}}


    2015年3月23日 15:48