使用pdftk自动合并PDF

时间:2016-08-26 12:04:39

标签: windows batch-file pdf merge pdftk

我有以下情况:

我有5个不同的文件夹包含PDF文件。

文件夹1 包含一个PDF - 首页,例如Front Page.pdf 这应该是每个新生成的PDF文件的首页。

文件夹2 包含不同的命名PDF文件,每个文件都以 1 _ FileName 开头,例如1_abcd_123.pdf,{{1} }。字符数不一样,唯一常见的是它们都以1_ghi_675.pdf开头 这应该是第2页。

文件夹3 包含相同数量的PDF文件,例如文件夹2 。 PDF文件的名称与文件夹2 完全相同,但它们以1_开头。

文件夹4 包含相同数量的PDF文件,例如文件夹2 文件夹3 。 PDF文件的名称与文件夹2 文件夹3 完全相同,但它们都以2_开头。

文件夹5 包含一个PDF,例如3_ 这应该是每个生成的PDF中的最后一页。

现在我想将首页和文件夹2,3,4和最后一页中的3个匹配的PDF文件合并为一个PDF。

我开始在线研究,发现应该在批处理过程中使用LastPage.pdf这样的PDF合并来完成。

此示例FOR loop group each iteration with same prefix in one line中的问题接近我的问题。但不同之处在于我有不同的文件夹,并且该过程应该在名称的末尾而不是在开头寻找匹配的数据。

任何人都可以提供帮助吗?

我根本没有这个领域的经验,但我尽力尽力进入这个话题。

1 个答案:

答案 0 :(得分:0)

下面的演示批处理代码演示了如何

  • 文件夹2 中找到的每个文件运行命令/可执行文件/脚本,文件名,文件扩展名和完整路径,不带双引号分配给循环变量#
  • 将没有路径的找到文件的名称 - %%~nx#(文件名和文件扩展名)拆分为两部分,因为tokens=1*基于第一个下划线,因为delims=_ in文件名称
    • 第一部分始终只是1被分配给循环变量I,后者未被进一步使用
    • 将第一个下划线分配给循环变量J之后的所有内容,这是ASCII表中I之后的下一个字符
  • 处理具有6个完整文件名的命令,其中最后一个完整文件名是从其他5个文件名生成的新文件。

演示代码:

@echo off
set "SourceFolder=C:\Temp"
for %%# in ("%SourceFolder%\Folder 2\*") do (
    for /F "tokens=1* delims=_" %%I in ("%%~nx#") do (
        echo "%SourceFolder%\Folder 1\Front Page.pdf" "%%#" "%SourceFolder%\Folder 3\2_%%J" "%SourceFolder%\Folder 4\3_%%J" "%SourceFolder%\Folder 5\LastPage.pdf" "%SourceFolder%\%%J"
    )
)
set "SourceFolder="

1_abcd_123.pdf文件夹2 中的两个文件1_ghi_675.pdfC:\Temp的输出为:

"C:\Temp\Folder 1\Front Page.pdf" "C:\Temp\Folder 2\1_abcd_123.pdf" "C:\Temp\Folder 3\2_abcd_123.pdf" "C:\Temp\Folder 4\3_abcd_123.pdf" "C:\Temp\Folder 5\LastPage.pdf" "C:\Temp\abcd_123.pdf"
"C:\Temp\Folder 1\Front Page.pdf" "C:\Temp\Folder 2\1_ghi_675.pdf" "C:\Temp\Folder 3\2_ghi_675.pdf" "C:\Temp\Folder 4\3_ghi_675.pdf" "C:\Temp\Folder 5\LastPage.pdf" "C:\Temp\ghi_675.pdf"

我没有 PDFTK 下载,安装和阅读文档。因此,最终需要的是代替命令 ECHO 将5个输入PDF文件合并到一个新的输出PDF文件中,必须自己找到。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • set /?