将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