Export-CSV导出长度但不是名称

Nin*_*irl 18 powershell export-to-csv

我有这个代码,我从PowerShell运行.当我在没有export-csv的情况下运行它时,我会在屏幕上获得所有文件夹名称.

dir | select -expand fullname | % { ($_ -split '\')[7] 
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加,| export-csv c:\test.txt那么我在文件中看到的不是文件夹名称,我希望就像我在屏幕上看到的那样.

#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
"24"
"11"
"17"
"20"
"20"
Run Code Online (Sandbox Code Playgroud)

mjo*_*nor 25

Export-Csv导出对象属性及其值的表.由于你的脚本正在生成字符串对象,并且它们拥有的唯一属性是长度,这就是你得到的.

如果您只想保存列表,请使用Out-FileSet-Content代替Export-Csv.


小智 15

上一个答案确实有效,但如果有人想将其输出到CSV文件中会怎样.


但这工作:

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

因为Export-Csv需要对象和输出属性.String []的唯一属性是Length,因此CSV文件仅包含Length.

要解决这个问题,我们需要将String []更改为Object [].最简单的方法是Select-Object.


将每个String放入新Object []的Name属性中,如下所示:

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

只是为了重新迭代,Select-Object输出一个可以轻松操作的自定义PSObject.这是非常强大的信息,明智地使用它.

  • 这行对我来说最有帮助 - $obj_list = $str_list | 选择对象@{Name='Name';Expression={$_}}。 (2认同)

小智 6

这对我有用:

$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
Run Code Online (Sandbox Code Playgroud)