【问题标题】:Export-CSV exports length but not nameExport-CSV 导出长度但不导出名称
【发布时间】:2013-10-27 08:29:09
【问题描述】:

我有从 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"

【问题讨论】:

    标签: powershell export-to-csv


    【解决方案1】:

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

    如果您只想保存列表,请使用Out-FileSet-Content 而不是Export-Csv

    【讨论】:

    • 我还添加了 |输出文件 "C:\TEST.TXT" -Append 。谢谢
    • 我的 csv 文件越来越长。结果在我调用的函数中,当我删除 csv 开始正确返回对象时,它的语音标记中有一些文本。
    【解决方案2】:

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


    工作:

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

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

    要解决这个问题,我们需要将 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。这是非常强大的信息,请明智地使用它。

    【讨论】:

    • 这一行对我最有帮助 - $obj_list = $str_list |选择对象@{Name='Name';Expression={$_}}。
    【解决方案3】:

    这对我有用:

    $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
    

    【讨论】:

      【解决方案4】:

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

      1. 默认输出文件

      定义主数组列表

      $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
      

      【讨论】:

      • 您正在回答一个 6 年前的问题,所以如果您可以添加更多细节,而不仅仅是“这是另一种方式”,那就太好了。如果它比以前的任何答案都好,您能解释一下原因吗?
      • 另外请格式化您的答案。使用正确的字体大小,正确使用粗体并将您的代码放入代码块中
      【解决方案5】:
      $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
      }
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      【解决方案6】:
      $output |Select-Object * | Export-Csv 'h:\filename.csv' -NoTypeInformation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多