求助:使用PDFtk编写批处理实现PDF拆分并按源文件名命名输出
批处理拆分PDF文件的修正方案
原代码存在的问题
for循环中设置prefix变量时未启用延迟扩展,循环结束后prefix仅会保留最后一个PDF文件名,无法逐个处理所有文件- 输出文件名格式错误,pdftk的
burst命令需用%03d表示三位序号,且变量引用时机不符合批处理语法要求 - 未在循环内调用pdftk,导致仅会处理最后一个PDF文件
修正后的批处理代码
@echo off setlocal enabledelayedexpansion :: 定义路径变量 set "in_dir=D:\Temp\IN" set "out_dir=D:\Temp\OUT" set "pdftk_path=D:\PDFtk Server\bin\pdftk.exe" :: 确保输出目录存在 if not exist "%out_dir%" mkdir "%out_dir%" :: 遍历所有PDF文件并逐个拆分 for /f "tokens=*" %%A in ('dir /b "%in_dir%\*.pdf"') do ( set "prefix=%%~nA" "%pdftk_path%" "%in_dir%\%%A" burst output "%out_dir%\!prefix!-%03d.pdf" ) endlocal exit
代码关键点说明
setlocal enabledelayedexpansion:启用延迟环境变量扩展,确保循环内的!prefix!能正确获取当前遍历到的文件名- 提前定义路径变量,让代码更易修改维护
if not exist "%out_dir%" mkdir "%out_dir%":自动创建输出目录,避免因目录不存在导致拆分失败- 循环内逐个处理每个PDF文件,使用
!prefix!引用当前文件名,配合%03d生成三位序号的输出文件(如abcdefgh-001.pdf)
内容的提问来源于stack exchange,提问作者Murugiah K
相关产品推荐
相关产品推荐

