【问题标题】:Bulk Merge of CSV Files in PowerShell using parent folder name使用父文件夹名称在 PowerShell 中批量合并 CSV 文件
【发布时间】:2017-01-25 11:31:34
【问题描述】:

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

【问题讨论】:

    标签: powershell csv


    【解决方案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
    }
    

    【讨论】:

    • 感谢您的输入 Ansgar - 就目前而言,脚本会在顶层转储空 CSF 文件(带有文件夹名称)。
    【解决方案2】:

    你可以像这样按目录分组:

    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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多