Board logo

标题: [文件操作] 求助批量合并pdf [打印本页]

作者: 水煮水    时间: 昨天 13:33     标题: 求助批量合并pdf

本帖最后由 水煮水 于 2024-12-21 13:41 编辑

各位大神,大哥,大佬!求助,我想要批量合并pdf,具体要求:
1、我会提供一个mulu.txt的文本文档,每一行都是一个文件夹名字。
2、批处理中我指定一个待处理路径,然后取mulu.txt的第一行的文件夹名字,去我指定的路径下找这个文件夹,找到后,把这个文件夹里面所有的pdf合并成一个pdf(需要遍历所有的子文件夹、子子文件夹等情况),按文件名字的排序进行合并
3、批处理中我指定一个已处理路径,把合并的pdf输出到这个目录下,合并的pdf文件名=本次处理的文件夹名
4、因为处理的目录很多,所以需要日志输出,日志内容包含:
XX年XX月XX日XX时XX点XX分XX秒,开始处理第N行,文件夹名字为XXXXXXX
XX年XX月XX日XX时XX点XX分XX秒,XX.pdf已处理(指的是零碎的pdf文件名,有多个零碎文件的就需要多条日志)
XX年XX月XX日XX时XX点XX分XX秒,完成处理,合并后的pdf名字为:


5、下面举个例子
A、mulu.txt文本如下:
2021年
2022年


B、待处理路径我指定为:Z:\合同资料
C、待处理路径下有以下文件和文件夹:
Z:\合同资料\销售A部\2021年\1月\王二.pdf
Z:\合同资料\销售A部\2021年\2月\张三.pdf
Z:\合同资料\销售A部\2021年\2月\王五.pdf
Z:\合同资料\销售A部\2021年\2月\赊账\赵柳.pdf
Z:\合同资料\销售A部\2022年\8月\王二麻子.pdf
Z:\合同资料\销售A部\2022年\9月\赵总赵甜.pdf

D、已处理路径我指定为:Z:\合同资料-合并后
E、执行批处理后,取mulu.txt第一行【2021年】,去我指定的待处理路径【Z:\合同资料】找【2021年】下面所有的pdf,找到了【王二.pdf、张三.pdf、王五.pdf、赵柳.pdf】,按文件名排序,排序后的顺序是【王二.pdf、王五.pdf、张三.pdf、赵柳.pdf】,就按这个顺序合并成pdf。
F,合并后的pdf文件名字是【2021年.pdf】,放在【Z:\合同资料-合并后】路径下面
G、日志输出如下:
XX年XX月XX日XX时XX点XX分XX秒,开始处理第1行,文件夹名字为2021年
XX年XX月XX日XX时XX点XX分XX秒,王二.pdf已处理
XX年XX月XX日XX时XX点XX分XX秒,王五.pdf已处理
XX年XX月XX日XX时XX点XX分XX秒,张三.pdf已处理
XX年XX月XX日XX时XX点XX分XX秒,赵柳.pdf已处理
XX年XX月XX日XX时XX点XX分XX秒,完成处理,合并后的pdf名字为:2021年.pdf


感谢感谢!
作者: 77七    时间: 昨天 18:35

下载pdftk http://bcn.bathome.net/s/tool/index.html?key=pdftk

  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. set "infolder=d:\a"
  5. set "outfolder=d:\b"
  6. set "file=d:\mulu.txt"
  7. set "_pdftk=d:\pdftk\pdftk.exe"
  8. (for /f "useback delims=" %%i in ("%file%") do (
  9. set /a n+=1
  10. setlocal
  11. call :gettime
  12. call echo %%t%% 开始处理第%%n%%行,文件夹名字为 %%i
  13. for /f "delims=" %%d in ('2^>nul dir /b /s /ad "%infolder%\%%i?"') do (
  14. if /i "%%i" equ "%%~nxd" (
  15. if not defined folder (
  16. set folder=1
  17. for /f "delims=" %%j in ('2^>nul dir /b /s /a-d "%%d\*.pdf"') do (
  18. set /a m+=1
  19. call set _"%%~nxj"%m%=%%j
  20. )
  21. for /f tokens^=3delims^=^" %%j in ('2^>nul set _') do (
  22. for /f "tokens=1* delims==" %%a in ("%%j") do (
  23. call set filelist=%%filelist%% "%%a"
  24. call echo %%t%% %%~nxa 已处理
  25. )
  26. )
  27. call :gettime
  28. if not defined filelist (
  29. call echo %%t%% 未完成处理,未找到文件
  30. ) else (
  31. call "%_pdftk%" %%filelist%% cat output "%outfolder%\%%i.pdf"
  32. call :gettime
  33. if exist "%outfolder%\%%i.pdf" (
  34. call echo %%t%% 完成处理,合并后的pdf名字为:%%i.pdf
  35. ) else (
  36. call echo %%t%% 未完成处理
  37. )
  38. )
  39. )
  40. )
  41. )
  42. if not defined folder (
  43. call :gettime
  44. call echo %%t%% 未完成处理,未找到文件夹 %%i
  45. )
  46. endlocal
  47. echo=
  48. )) > "log.log" 2>&1
  49. pause
  50. exit
  51. :gettime
  52. for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
  53. set t=%%a
  54. )
  55. set t=%t:~0,4%年%t:~4,2%月%t:~6,2%日%t:~8,2%时%t:~10,2%分%t:~12,2%秒
  56. exit /b
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2