标题: [文件操作] 求助批量合并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
- @echo off
- rem 保存为ansi编码
- cd /d "%~dp0"
- set "infolder=d:\a"
- set "outfolder=d:\b"
- set "file=d:\mulu.txt"
- set "_pdftk=d:\pdftk\pdftk.exe"
-
- (for /f "useback delims=" %%i in ("%file%") do (
- set /a n+=1
- setlocal
- call :gettime
- call echo %%t%% 开始处理第%%n%%行,文件夹名字为 %%i
- for /f "delims=" %%d in ('2^>nul dir /b /s /ad "%infolder%\%%i?"') do (
- if /i "%%i" equ "%%~nxd" (
- if not defined folder (
- set folder=1
- for /f "delims=" %%j in ('2^>nul dir /b /s /a-d "%%d\*.pdf"') do (
- set /a m+=1
- call set _"%%~nxj"%m%=%%j
- )
- for /f tokens^=3delims^=^" %%j in ('2^>nul set _') do (
- for /f "tokens=1* delims==" %%a in ("%%j") do (
- call set filelist=%%filelist%% "%%a"
- call echo %%t%% %%~nxa 已处理
- )
- )
- call :gettime
- if not defined filelist (
- call echo %%t%% 未完成处理,未找到文件
- ) else (
- call "%_pdftk%" %%filelist%% cat output "%outfolder%\%%i.pdf"
- call :gettime
- if exist "%outfolder%\%%i.pdf" (
- call echo %%t%% 完成处理,合并后的pdf名字为:%%i.pdf
- ) else (
- call echo %%t%% 未完成处理
- )
- )
- )
- )
- )
- if not defined folder (
- call :gettime
- call echo %%t%% 未完成处理,未找到文件夹 %%i
- )
- endlocal
- echo=
- )) > "log.log" 2>&1
- pause
- exit
-
- :gettime
- for /f %%a in ('wmic os get localdatetime ^| findstr [0-9]') do (
- set t=%%a
- )
- set t=%t:~0,4%年%t:~4,2%月%t:~6,2%日%t:~8,2%时%t:~10,2%分%t:~12,2%秒
- exit /b
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |