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

问题描述 投票:0回答:7

我有从 powershell 运行的代码。当我在没有导出 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"
powershell export-to-csv
7个回答
47
投票

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

如果您只想保存列表,请使用

Out-File
Set-Content
而不是
Export-Csv


35
投票

前面的答案确实有效,但如果有人希望将其输出到 CSV 文件中怎么办?


工作:

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

因为

Export-Csv
接受对象并输出属性。 String[ ] 的唯一属性是长度,因此 CSV 文件仅包含长度。

为了解决这个问题,我们需要将 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

重申一下,

Select-Object
输出一个可以轻松操作的自定义 PSObject。这是非常强大的信息,请明智地使用它。


8
投票

这对我有用:

$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

0
投票

这是处理此问题的另一种方法:

  1. Out-File 默认输出

定义主数组列表

$MASTER_ARRAY_LIST =  [System.Collections.ArrayList]@()

定义输出文件名

$OutputFilename="C:\TEMP\MyOutputFile.csv"

ForEach ( $Something in $List_of_Somethings) {
    $CURRENT_RECORD_DETAILS = New-Object PSObject -Property @{'name'=$($Something.Name);'fullname'=$($Something.FullName);'id'=$($Something.ID)}
    $MASTER_ARRAY_LIST.Add( $CURRENT_RECORD_DETAILS ) > $null
}

$MASTER_ARRAY_LIST.ToArray() | Select-Object -Property name,fullname,id | Export-Csv -Path $OutputFilename -NoTypeInformation

0
投票
$test = @("test1","test2","test3")
$test | export-csv "firstTry.csv"
#We see that this fails. So here is how to to do it with the desired results

foreach ($item in $test) {
  [ pscustomobject]@{ ResultColumn = $item } | Export-Csv -Path ./secondTry.csv -NoTypeInformation -Append
}

0
投票

对于任何其他偶然发现此问题的人,最简单的解决方案是从

中删除“-expand”

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

其他答案中提到的“-expand”从全名字段中删除了属性标头,因此现在只有一个长度属性 - 不再是全名属性。因此,export-csv 会导出长度,因为它是唯一剩余的属性。


-4
投票
$output |Select-Object * | Export-Csv 'h:\filename.csv' -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.