使用PowerShell结合CSV按规则批量合并PDF文件
批量合并PDF文件的遍历执行方案
需求背景
- 需合并1400+个PDF文件,同目录下存在
data.csv文件,包含FilePath和Filename两列,PDF文件名与Filename列完全匹配 - 按
Filename字段的前三位字符进行分组,严格遵循CSV中的排序顺序合并每组内的文件 - 合并后的PDF文件命名规则为
Y+前三位字符(例如YEIN.pdf) - 需要遍历处理CSV中所有行数据
已实现的前置脚本
1. 拆分data.csv为按前三位分组的多个CSV文件
$data = Import-Csv '.\data.csv' | Select-Object Filepath,Filename,@{n='Group';e={$_.Filename.Substring(0,3)}} $data | Format-Table -GroupBy Group Group-Object {$_.Group}| ForEach-Object { $_.Group | Export-Csv "$($_.Group).csv" -NoTypeInformation } foreach ($Group in $data | Group Group) { $data | Where-Object {$_.Group -eq $group.name} | ConvertTo-Csv -delimiter "`t" -NoTypeInformation | foreach {$_.Replace('"','')} | Out-File "$($group.name).csv" }
2. 单个分组CSV对应的合并脚本(可正常运行)
python.exe .\create_from_template.py template_source_list_files .\EIN.csv > part1script.ps1 python.exe .\create_from_template.py template_sort_merge_destination_files .\EIN.csv > part2script.ps1 Get-Content part1script.ps1, part2script.ps1 | Set-Content execute.ps1 .\execute.ps1
批量遍历执行方案
在PowerShell中添加遍历逻辑,即可针对所有拆分后的CSV文件循环执行合并流程:
# 获取当前目录下所有拆分后的分组CSV文件(排除原始data.csv) $groupCsvFiles = Get-ChildItem -Path . -Filter "*.csv" | Where-Object { $_.Name -match '^[A-Za-z0-9]{3}\.csv$' -and $_.Name -ne 'data.csv' } foreach ($csvFile in $groupCsvFiles) { # 生成对应分组的合并脚本 python.exe .\create_from_template.py template_source_list_files $csvFile.FullName > part1script.ps1 python.exe .\create_from_template.py template_sort_merge_destination_files $csvFile.FullName > part2script.ps1 # 合并临时脚本并执行 Get-Content part1script.ps1, part2script.ps1 | Set-Content execute.ps1 .\execute.ps1 # 可选:执行完成后清理临时脚本文件 Remove-Item -Path part1script.ps1, part2script.ps1, execute.ps1 -Force }
关键说明
- 脚本通过
Get-ChildItem筛选出所有符合三位字符.csv格式的分组文件,避免误处理原始的data.csv - 循环过程中自动将单个合并脚本中的固定文件名替换为当前遍历到的分组CSV文件
- 可选的临时文件清理步骤可避免目录中残留大量临时脚本文件
内容的提问来源于stack exchange,提问作者Sateesh
相关产品推荐
相关产品推荐

