web-dev-qa-db-ja.com

Export-CSVは長さをエクスポートしますが、名前はエクスポートしません

私はpowershellから実行しているこのコードを持っています。 export-csvなしで実行すると、すべてのフォルダー名が画面に表示されます。

dir | select -expand fullname | % { ($_ -split '\')[7] 

しかし、| export-csv c:\test.txtを追加すると、画面に表示されるのと同じように、期待したフォルダー名ではなく、ファイルに次のように表示されます。

#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
"24"
"11"
"17"
"20"
"20"
16
Ninja Cowgirl

Export-Csvは、オブジェクトのプロパティとその値のテーブルをエクスポートします。スクリプトは文字列オブジェクトを生成しており、それらが持つ唯一のプロパティは長さなので、それが得られたものです。

リストを保存するだけの場合は、Out-FileまたはSet-Content の代わりに Export-Csv

22
mjolinor

前の答えは機能しますが、誰かがそれをCSVファイルに出力しようとしている場合はどうでしょう。


これは[〜#〜] not [〜#〜] work:

$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType

なぜならExport-Csvオブジェクトを受け取り、プロパティを出力します。 String []のプロパティは長さのみであるため、CSVファイルには長さのみが含まれます。

これを修正するには、String []をObject []に変更する必要があります。最も簡単な方法はSelect-Object


次のように、各文字列を新しいObject []のNameプロパティに追加します。

$str_list = @('Mark','Henry','John')
$obj_list = $str_list | Select-Object @{Name='Name';Expression={$_}}
$obj_list | Export-Csv .\ExportStrList.csv -NoType

繰り返しになりますが、Select-Objectは、簡単に操作できるカスタムPSObjectを出力します。これは非常に強力な情報です。賢く使用してください。

12
Sean M.

これは私のために働いた:

$data = @()
$row = New-Object PSObject
$row | Add-Member -MemberType NoteProperty -Name "name1" -Value "Test"
$row | Add-Member -MemberType NoteProperty -Name "name2" -Value 2
$data += $row

$data | Export-Csv "Text.csv" -NoTypeInformation
6
derBasti