找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 141715|回复: 58

[文件操作] [已解决]批处理按照顺序合并PDF 文件

[复制链接]
发表于 2023-6-24 19:11:09 | 显示全部楼层 |阅读模式
1.在当前目录有多个文件夹,每个文件夹内有多个PDF 文件。
2.想把每个文件内的多个pdf 文件合并成一个pdf,存在在这个文件夹内,用这个文件夹名来命名这个合并PDF 文件。

举例,文件夹名称:S123     包含(1.pdf, 2.pdf, 3.pdf, 4.pdf,5.pdf)等多个pdf 文件,要求合并后文件名称是S123,
在当前目录下,这样类似的文件夹有多个。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-6-24 21:19:38 | 显示全部楼层
  1. @echo off
  2. rem 站内下载pdftk,修改为实际路径
  3. set "pdftk=C:\PDFtk\PDFtk\pdftk.exe"
  4. for /d %%d in (*) do (
  5.         pushd "%%d"
  6.         setlocal enabledelayedexpansion
  7.         for /f "delims=" %%a in ('dir /b /a-d *.pdf ^|findstr /vbc:"S" /vbc:"D C F" /vbc:"D C S" /vbc:"D P" /vbc:"D F"') do (
  8.                 set "str=!str! "%%a""
  9.         )
  10.         "%pdftk%" "S*.pdf" "D C F*.pdf" "D C S*.pdf" !str! "D P*.pdf" "D F*.pdf" cat output "%%~nxd.pdf"
  11.         endlocal
  12.         popd
  13. )
  14. pause
复制代码
发表于 2023-6-25 07:45:12 | 显示全部楼层
回复 2# 77七


    findstr的这些条件是为了满足顶楼的哪个需求?
发表于 2023-6-25 07:52:40 | 显示全部楼层
回复 1# feiyan


test-1.bat
  1. @echo off
  2. REM 1、下载命令行工具PDFtk
  3. REM http://bcn.bathome.net/s/tool/index.html?key=PDFtk
  4. REM 2、根据自己电脑实际安装路径设置以下临时环境变量
  5. set "path=C:\Program Files (x86)\PDFtk Server\bin;%path%"

  6. cd /d "%~dp0"
  7. for /d %%i in (*) do (
  8.     pushd "%%i"
  9.     echo 正在处理文件夹:%%i
  10.     pdftk.exe *.pdf cat output "%%~nxi.pdf"
  11.     popd
  12. )
  13. pause
复制代码
发表于 2023-6-25 07:54:00 | 显示全部楼层
回复 1# feiyan


test-2.bat
  1. @echo off
  2. REM 1、下载命令行工具PDFtk
  3. REM http://bcn.bathome.net/s/tool/index.html?key=PDFtk
  4. REM 2、根据自己电脑实际安装路径设置以下临时环境变量
  5. set "path=C:\Program Files (x86)\PDFtk Server\bin;%path%"

  6. cd /d "%~dp0"
  7. for /f "delims=" %%i in ('dir /b /ad') do (
  8.     pushd "%%i"
  9.     echo 正在处理文件夹:%%i
  10.     pdftk.exe *.pdf cat output "%%~nxi.pdf"
  11.     popd
  12. )
  13. pause
复制代码
发表于 2023-6-25 11:51:41 | 显示全部楼层
回复 3# Batcher
站长,是这样的,楼主编辑了顶楼,把需求改简单了,之前是根据文件名开头指定了顺序合并,考虑楼主问题未解决,我就把原始需求的代码发上来了。
 楼主| 发表于 2023-6-25 12:13:44 | 显示全部楼层
回复 2# 77七
感谢77,当时我发现我描述的有点复杂,怕难以实现,后来就重新编辑了下,把要求变的简单点了,
其实我发现只要在  pdftk *.pdf  cat   (这个地方,使用首字母加通配符也可以达到我的要求,和你的思路有点类似,但是我的三角猫技术,不会把合并后的文件名称变成和文件夹名称一致。也不会把所有的文件夹都这样操作
你这个我跑了下,无法成功。
 楼主| 发表于 2023-6-25 12:30:56 | 显示全部楼层
回复 5# Batcher
感谢管理员batcher, 我拷贝试了下,无法成功,我还怕我的路径和你的不一样,特地在 bin 添加\pdftk.exe, 添加这个和不添加这个,我都试了下,还是无法成功
但是我使用最小白的方式,是可以合并的,证明我的软件是可以起作用的。(pdftk.exe *.pdf cat output 11.pdf)
发表于 2023-6-25 13:07:29 | 显示全部楼层
回复 7# feiyan

提示什么?
   把批处理保存为ansi编码格式,试试。
发表于 2023-6-25 14:29:10 | 显示全部楼层
回复 8# feiyan


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
 楼主| 发表于 2023-6-25 19:09:09 | 显示全部楼层
回复 10# Batcher
感谢,是我失误了,我把这个批处理放在这个文件夹里面,难怪一直不成功,放在外面就OK了
 楼主| 发表于 2023-6-25 19:12:44 | 显示全部楼层
回复 9# 77七
是我失误了,我把这个批处理放在文件夹里面了,所以一直不成功,放在外面就OK 了,感谢
 楼主| 发表于 2023-7-3 20:10:52 | 显示全部楼层
回复 2# 77七


    @77七  77你好,是这样的,这个我用这个代码尝试下,发现最后会多合并几个文件进去,就是之前已经被定义顺序的这几个文件,也就是在( !str! )之前的几个文件名,最后还是会被重复合并到整个文件中。
发表于 2023-7-4 18:58:54 | 显示全部楼层
回复 13# feiyan


  
  1. @echo off
  2. rem 站内下载pdftk,修改为实际路径
  3. set "pdftk=C:\PDFtk\PDFtk\pdftk.exe"
  4. for /d %%d in (*) do (
  5.         pushd "%%d"
  6.         setlocal enabledelayedexpansion
  7.         for /f "delims=" %%a in ('dir /b /a-d *.pdf ^|findstr /vbc:"S" /vbc:"D C F" /vbc:"D C S" /vbc:"D P" /vbc:"D F"') do (
  8.                 set "str=!str! "%%a""
  9.         )
  10.         "%pdftk%" "S*.pdf" "D C F*.pdf" "D C S*.pdf" !str! "D P*.pdf" "D F*.pdf" cat output "%~dp0%%~nxd.pdf"
  11.         endlocal
  12.         popd
  13.         if exist "%%~nxd.pdf" (
  14.                 move "%%~nxd.pdf" "%%d"
  15.         )
  16. )
  17. pause
复制代码
 楼主| 发表于 2023-7-4 20:13:06 | 显示全部楼层
回复 14# 77七
感谢77.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:43 , Processed in 0.021874 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表