【问题标题】:add colum to merged csv file将列添加到合并的 csv 文件
【发布时间】:2016-01-13 15:46:58
【问题描述】:

好的,这就是我的代码:

$a = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\*.csv"
$b = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\merge.csv"

(get-content $a) | set-content $b

这会将所有文件的所有数据拉到一个合并文件中,但是我需要一个附加项,我需要拉单个文件的名称并将其附加到多个文件的文件的第一列,数百一次。

【问题讨论】:

    标签: excel csv powershell


    【解决方案1】:

    未经测试,但应该这样做:

    $a = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\*.csv"
    $b = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\merge.csv"
    
    
    Get-ChildItem $a | % { 
        Import-Csv $_.Fullname | Add-Member -MemberType NoteProperty -Name 'File Name' -Value $_.Name 
    } | Export-Csv $b
    

    【讨论】:

      【解决方案2】:

      假设每个 CSV 文件都有相同的列标题,我倾向于使用 Import-CSV 而不是 Get-Content,以便您可以将 CSV 内容作为具有命名属性的对象数组来处理。

      然后您需要做的就是遍历数组的每个项目并附加一个包含文件路径的属性,您可以使用Add-Member cmdlet 来完成。完成后,使用 Export-CSV cmdlet 导出对象数组。

      $directory = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\"
      $search = $directory + "*.csv"
      $exportpath = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\merge.csv"
      $paths = get-childitem $search
      $objectArrays = @()
      $paths | %{ 
            $filepath = $_.fullname; 
            $objectArray = Import-CSV $filepath; 
            $objectArray | %{ 
                 Add-Member -inputobject $_ -Name "SourceFile" -Value $filepath -MemberType NoteProperty}; 
            $objectArrays += $objectArray}
      $objectArrays | export-csv -path $exportpath -notype
      

      这会将 SourceFile 属性作为输出的 CSV 文件中的最后一列

      【讨论】:

      • 如果您知道列的名称,您可以设置它们的显示顺序,如下所示:$objectArrays | select-object -property SourceFile, Column2, Column3, Column4 | export-csv -path $exportpath -notype 其中“SourceFile”是我们的文件路径列的名称,“Column2”是第二列中您想要的列的名称,依此类推。
      【解决方案3】:

      好的,简化... 搜索目标文件夹,通过管道连接到 ForEach-Object 循环(使用简写 %),将文件名捕获为变量,导入 CSV,使用 Select-Object cmdlet 添加源文件,转换它返回一个 CSV,结束循环,管道到目标文件。

      $a = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\*.csv"
      $b = "C:\Users\some.deranged.character\Desktop\SomeAwfulPlace\Checklists\C_F\merge.csv"
      
      GCI $a | %{$FileName=$_.Name;Import-CSV $_|Select @{l='SourceFile';e={$FileName}},*|ConvertTo-CSV -NoType} | set-content $b
      

      【讨论】:

        猜你喜欢
        • 2020-03-30
        • 2019-03-25
        • 1970-01-01
        • 2019-11-06
        • 2018-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多