注:需要具体的脚本,请关注easy4java获取
Windows 批量打印 PDF 工具分享:支持文件夹、指定文件、当天文件、预览列表
日常办公中,经常会遇到一个很麻烦的场景:
- 一个文件夹里有几十个 PDF 要打印
- 每个 PDF 都要手动打开、点击打印、关闭
- 有些 PDF 在子文件夹里,还要一个个找
- 只想打印今天生成的 PDF
- 打印前还想先确认一下文件列表,避免打错
如果文件数量少还好,一旦 PDF 多起来,手动操作非常浪费时间。
所以我整理了一个 Windows 下可用的 批量打印 PDF 小工具,通过一个 .bat 菜单入口配合 PowerShell 脚本,实现 PDF 批量打印。
一、工具文件
工具由两个文件组成:
BatchPrintPDF.bat
BatchPrintPDF.ps1
其中:
- BatchPrintPDF.bat:双击运行的菜单入口
- BatchPrintPDF.ps1:实际执行批量查找、打印、日志记录的脚本
两个文件建议放在同一个目录下。
二、这个工具能做什么?
目前支持以下几种模式:
-
快速打印:打印 bat 所在目录下的所有 PDF
-
打印某个文件夹里的所有 PDF
-
打印指定的多个 PDF 文件
-
只打印今天修改过的 PDF 文件
-
只列出文件,不实际打印
比较适合这些场景:
- 批量打印发票 PDF
- 批量打印订单 PDF
- 批量打印合同、报价单
- 打印当天下载或生成的 PDF
- 办公室固定打印机批量输出文件
- 打印前先核对 PDF 文件列表
三、使用前准备
1. Windows 系统
该工具适用于 Windows 环境。
2. 建议安装 SumatraPDF
脚本会优先检测 SumatraPDF,因为它比较轻量,适合命令行静默打印。
如果电脑中没有安装 SumatraPDF,脚本也会尝试使用:
- Adobe Acrobat / Adobe Reader
- Windows 默认 PDF 打印方式
但实际体验上,推荐安装 SumatraPDF,批量打印会更稳定。
四、使用方法
方法一:快速打印当前文件夹内所有 PDF
把这两个文件放到 PDF 所在文件夹:
BatchPrintPDF.bat
BatchPrintPDF.ps1
然后双击运行:
BatchPrintPDF.bat
选择:
0
工具会自动打印当前目录下的所有 PDF。
方法二:打印指定文件夹里的 PDF
运行 BatchPrintPDF.bat 后,选择:
1
然后输入或拖入文件夹路径。
程序会询问是否包含子文件夹:
Include subfolders? Y/N
如果选择 Y,会递归打印该目录及所有子目录中的 PDF。
方法三:打印指定的多个 PDF 文件
运行后选择:
2
然后逐个输入 PDF 文件路径。
输入完成后,直接回车空行结束。
适合只想打印几个指定 PDF 的情况。
方法四:只打印今天的 PDF 文件
运行后选择:
3
输入文件夹路径后,脚本会筛选出今天修改过的 PDF 文件进行打印。
适合每天固定打印当天订单、当天发票、当天生成文件的场景。
方法五:只查看文件列表,不实际打印
运行后选择:
4
这个模式不会真的打印,只会列出将要打印的 PDF 文件。
建议第一次使用时先用这个模式确认一下,避免误打。
五、默认打印机配置
脚本中默认指定的打印机名称是:
QR-368
如果你的打印机名称不是这个,需要修改 BatchPrintPDF.bat 里的打印机名称。
例如把:
set PNAME=QR-368
改成你电脑里的打印机名称,比如:
set PNAME=HP LaserJet Pro
也可以在 PowerShell 脚本中通过 -Printer 参数指定打印机。
例如:
.\BatchPrintPDF.ps1 -Path "C:\PDF文件" -Printer "HP LaserJet Pro"
bash
@echo off
setlocal enabledelayedexpansion
title Batch Print PDF
echo.
echo ========================================
echo Batch Print PDF
echo ========================================
echo.
echo 0. Quick print (all PDF in same folder as this bat)
echo 1. Print all PDF in a folder
echo 2. Print specific PDF files
echo 3. Print today's PDF files only
echo 4. List files only (no actual printing)
echo.
set /p CHOICE="Select [0-4]: "
if "%CHOICE%"=="0" goto QUICK_MODE
if "%CHOICE%"=="1" goto DIR_MODE
if "%CHOICE%"=="2" goto FILE_MODE
if "%CHOICE%"=="3" goto TODAY_MODE
if "%CHOICE%"=="4" goto WHATIF_MODE
echo Invalid choice.
pause
exit /b 1
:QUICK_MODE
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0BatchPrintPDF.ps1" -Path "%~dp0" -Printer "QR-368" -DelaySeconds 2 -Force
goto END
:DIR_MODE
echo.
set /p DIR_PATH="Folder path (drag folder here): "
set /p SUB="Include subfolders? [Y/N]: "
set RFLAG=
if /i "!SUB!"=="Y" set RFLAG=-Recurse
set PNAME=QR-368
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0BatchPrintPDF.ps1" -Path "!DIR_PATH!" !RFLAG! -Printer "!PNAME!"
goto END
:FILE_MODE
echo.
echo Enter PDF file paths one by one. Press Enter on empty line when done.
set FLIST=
:FILE_LOOP
set /p FONE=" File path: "
if "!FONE!"=="" goto DO_FILES
set FLIST=!FLIST! "!FONE!"
goto FILE_LOOP
:DO_FILES
set PNAME=QR-368
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0BatchPrintPDF.ps1" -Path !FLIST! -Printer "!PNAME!"
goto END
:TODAY_MODE
echo.
set /p DIR_PATH="Folder path: "
set PNAME=QR-368
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0BatchPrintPDF.ps1" -Path "!DIR_PATH!" -Today -Recurse -Printer "!PNAME!"
goto END
:WHATIF_MODE
echo.
set /p DIR_PATH="Folder path: "
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0BatchPrintPDF.ps1" -Path "!DIR_PATH!" -Recurse -WhatIf
goto END
:END
echo.
pause
endlocal