将colum添加到合并的csv文件

好吧,inheritance人我明智的代码:

$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 

这将所有文件的所有数据合并为一个合并文件,但是我需要一个额外的项目,我需要提取单个文件的名称,并将其附加到文件的第一列以获取多个文件,每次数百个。

没有testing,但这样的事情应该这样做:

 $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内容作为具有命名属性的对象数组使用。

然后,您只需循环访问数组中的每个项目,然后添加一个包含文件path的属性,您可以使用Add-Member cmdlet执行该操作。 完成后,使用Export-CSV cmdlet Export-CSV对象数组。

 $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文件中的最后一列

确定,简化…search目标文件夹,pipe道到ForEach-Object循环(使用简写% ),将文件名称作为variables捕获,导入CSV,使用Select-Object cmdlet添加源文件,将其转换回CSV ,结束循环,pipe道到目标文件。

 $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