Excel 将列添加到合并的csv文件

Excel 将列添加到合并的csv文件,excel,csv,powershell,Excel,Csv,Powershell,好的,以下是我的代码: $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 这会将所有文件的所有数据拉入一个合并文件中,但我还需要一个附

好的,以下是我的代码:

$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

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

未测试,但类似的操作应该可以:

$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

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

然后,您所需要做的就是遍历数组的每个项并附加一个包含文件路径的属性,您可以使用
addmember
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文件的最后一列

确定,简化。。。搜索目标文件夹,将管道连接到
ForEach对象
循环(使用缩写
%
),将文件名捕获为变量,导入CSV,使用
选择对象
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

如果您知道列的名称,可以设置它们的显示顺序,如下所示:
$objectArrays |选择对象-属性SourceFile,Column2,Column3,Column4 | export csv-path$exportpath-notype
,其中“SourceFile”是文件路径列的名称,而“Column2”是要在第二列中显示的列的名称,依此类推。