私は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"
Export-Csv
は、オブジェクトのプロパティとその値のテーブルをエクスポートします。スクリプトは文字列オブジェクトを生成しており、それらが持つ唯一のプロパティは長さなので、それが得られたものです。
リストを保存するだけの場合は、Out-File
またはSet-Content
の代わりに Export-Csv
。
前の答えは機能しますが、誰かがそれを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を出力します。これは非常に強力な情報です。賢く使用してください。
これは私のために働いた:
$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