在命令行开始执行此任务后,我意识到我需要使用Powershell进行操作。我有大约100个文件夹,每个文件夹有几千个CSV文件,我想在每个文件夹中合并在一起。理想情况下,每个文件夹中的合并CSV文件将使用父文件夹名称。例如,这是一个包含100个文件夹的顶级文件夹
E:\ CSVFolders
子文件夹以半随机方式命名,如下所示:
E:\ CSVFolders \ Folder1中
E:\ CSVFolders \ Folder18
到目前为止,我正处于这一点:
# Merge csv files and use the parent folder name
Import-Csv (Get-ChildItem File*.csv) |
Export-Csv $folderName.csv -NoTypeInformation -Encoding UTF8
我正在努力让脚本枚举子文件夹,然后使用他们的名字作为合并的CSV文件的基础,所以如果有人能够阐明这一点我会很感激!
答案 0 :(得分:1)
使用两个循环:
Get-ChildItem 'E:\CSVFolders' | Where-Object {
$_.PSIsContainer
} | ForEach-Object {
$csv = Join-Path $_.FullName ($_.Name + '.csv')
Get-ChildItem $_.FullName -Filter File*.csv | ForEach-Object {
Import-Csv $_.FullName
} | Export-Csv $csv -NoType -Encoding UTF8
}
答案 1 :(得分:0)
您可以按目录进行分组:
Get-ChildItem "c:\temp" -file -Filter "*.csv" -Recurse |
group DirectoryName |
%{$dir=$_.Name; $_.Group.FullName | %{import-csv -path $_} | export-csv "$dir\global.csv" -NoTypeInformation}
短版(不是纯粹主义者):
gci "c:\temp" -file -Filter "*.csv" -Rec |
group DirectoryName |
%{$dir=$_.Name; $_.Group.FullName | %{ipcsv -path $_} | epcsv "$dir\global.csv" -NoType}