You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PowerShell与PDFTK合并子目录PDF后自动移至父目录的需求

优化PDF合并脚本:自动将合并文件移至父目录

我帮你调整了PowerShell脚本,除了保留原本的PDF合并功能,还会自动把合并好的文件移动到子目录的父目录里,不用再手动操作啦!

修改后的完整脚本

$pdftk = "C:\SymLinks\Combine\pdftk.exe"
$inputFolder = "I:\Fort Gibson-DONE"

# 递归遍历所有PDF,按目录分组处理
Get-ChildItem $inputFolder -Recurse -Include *.pdf | Sort-Object | Group-Object DirectoryName | ForEach-Object {
    # 提取子目录的名称,作为合并后PDF的文件名
    $subDirName = Split-Path $_.Name -Leaf
    $mergedPdfPath = Join-Path $_.Name "$subDirName.pdf"
    
    # 执行PDF合并操作
    & $pdftk $_.group CAT OUTPUT $mergedPdfPath
    
    # 检查合并是否成功,再执行移动操作
    if (Test-Path $mergedPdfPath) {
        # 获取子目录的父目录路径(目标路径)
        $parentDir = Split-Path $_.Name -Parent
        $targetPath = Join-Path $parentDir "$subDirName.pdf"
        
        # 移动文件,-Force参数会覆盖父目录中同名文件(可根据需求移除)
        Move-Item -Path $mergedPdfPath -Destination $targetPath -Force
        Write-Host "✅ 已完成:合并并移动文件至 $targetPath"
    } else {
        Write-Warning "⚠️ 合并失败:未生成文件 $mergedPdfPath"
    }
}

关键改动说明

  • 获取父目录路径:用Split-Path $_.Name -Parent直接拿到子目录的上级目录,也就是你要存放合并文件的位置
  • 文件存在验证:加了Test-Path检查合并后的PDF是否生成成功,避免移动不存在的文件
  • 可选覆盖控制Move-Item-Force参数会覆盖父目录里的同名文件,如果想保留旧文件,可以删掉这个参数,脚本会在遇到重名时报错提醒;或者你也可以给新文件加时间戳区分:
    # 给文件名加上时间戳,避免重名覆盖
    $timestamp = Get-Date -Format "yyyyMMddHHmmss"
    $targetPath = Join-Path $parentDir "$subDirName-$timestamp.pdf"
    

注意事项

  1. 确保pdftk.exe的路径正确,能正常运行(可以先在控制台单独执行& "C:\SymLinks\Combine\pdftk.exe"测试)
  2. 建议先在测试目录运行脚本,确认功能符合预期后再处理正式文件
  3. 如果子目录里没有PDF文件,脚本会自动跳过该目录,不会生成空文件

内容的提问来源于stack exchange,提问作者AmandaKay10

火山引擎 最新活动