使用父文件夹名称

时间:2017-01-25 11:31:35

标签: powershell csv

在命令行开始执行此任务后,我意识到我需要使用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文件的基础,所以如果有人能够阐明这一点我会很感激!

2 个答案:

答案 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}