自动遍历文件夹,列出所有文件,并为 PDF 文件额外标注页数
使用:下载附件 把附件所有内容放置根目录,运行bat命令,生成结果
附件:1-智能文件清单生成器.bat
附件:1-pdfinfo及其依赖.zip
✅ 核心功能
该脚本会 自动扫描当前目录及其所有子目录中的每一个文件,生成一个名为 AllFiles.csv 的 CSV 格式清单文件,包含以下三列信息:
列名 说明
文件路径 文件相对于脚本所在目录的路径(例如:Reports\2025\summary.pdf)
文件名(无扩展名) 去掉扩展名后的文件主名(例如:summary)
页数(PDF) 如果是 PDF 文件,显示其总页数;否则显示 N/A
🔍 详细行为说明
- 自动运行位置
- 脚本只处理 它自己所在的文件夹及所有子文件夹。
- 无需手动指定路径,双击即可运行。
- 支持所有文件类型
- 不仅限于 PDF,所有文件(如
.docx,.xlsx,.jpg,.txt等)都会被列出。 - 但只有
.pdf(不区分大小写,如.PDF也有效)会尝试读取页数。
- 不仅限于 PDF,所有文件(如
- PDF 页数识别原理
- 使用外部工具
pdfinfo.exe(来自 Poppler/Xpdf)解析 PDF 内容。 - 自动匹配英文
Pages:或中文页数:字段,兼容多语言系统。 - 若 PDF 损坏、加密或无法读取,页数显示为
N/A(不会中断脚本)。
- 使用外部工具
- 安全处理特殊字符
- 支持文件/目录名中包含:
- 中文(如
报告.pdf) - 空格(如
年度 总结.pdf) - 特殊符号(如
合同(2025).pdf,data&info.xlsx)
- 中文(如
- 通过临时文件中转
pdfinfo输出,避免命令行解析错误。
- 支持文件/目录名中包含:
- 输出格式
- 生成标准 CSV 文件(可用 Excel、WPS、记事本打开)。
- 所有字段用英文双引号包裹,防止逗号干扰(如文件名含逗号也能正确显示)。
- 编码为系统默认 ANSI(在中文 Windows 上通常为 GBK),Excel 可直接打开。
- 错误防护
- 若未找到
pdfinfo.exe,会提示用户下载并退出。 - 自动清理临时文件,不留垃圾。
- 非 PDF 文件不会调用
pdfinfo,提升速度。
- 若未找到
⚙️ 依赖项(必须提供)
pdfinfo.exe 及其依赖 DLL 文件
来源:Poppler for Windows
➤ 需将 整个 bin 文件夹内容 复制到脚本同目录!
💡 提示:脚本会自动检查 pdfinfo.exe 是否存在,缺失时会友好提示。
🧩 适用场景
快速统计项目中所有 PDF 文档的页数
生成文件资产清单(用于归档、审计、交接)
批量预处理前了解文档规模
教育/办公环境中整理电子资料
🚫 局限性
不能解析加密/受保护的 PDF(页数显示为 N/A)
依赖外部工具(纯批处理无法读取 PDF 内容)
不适用于超大目录(数万文件时速度较慢)
✅ 总结一句话:
这个脚本是一个“智能文件清单生成器”,能自动遍历文件夹,列出所有文件,并为 PDF 文件额外标注页数,结果保存为 Excel 友好的 CSV 表格。
下载 Poppler Windows 包
https://github.com/oschwartz10612/poppler-windows/releases/download/v24.09.0/poppler-24.09.0-win64.zip
解压后进入 poppler-24.09.0-win64\Library\bin
将该 bin 文件夹内所有文件(约 50+ 个)复制到你的 .bat 脚本所在目录
放一个测试 PDF 文件(如 test.pdf)在同一目录
双击运行脚本
打开 AllFiles.csv,检查 PDF 行是否有页数
bat脚本
@echo off
setlocal enabledelayedexpansion
set "output=%~dp0AllFiles.csv"
set "pdfinfo=%~dp0pdfinfo.exe"
set "tempfile=%temp%\pdf_pages.tmp"
if not exist "%pdfinfo%" (
echo 错误:未找到 pdfinfo.exe!
echo 请将 pdfinfo.exe 及其依赖 DLL 放在本脚本同目录。
pause
exit /b
)
:: 强制英文输出
set "LC_ALL=C"
> "%output%" echo 文件路径,文件名(无扩展名),页数(PDF)
for /f "delims=" %%F in ('dir /s /b /a-d "%~dp0"') do (
set "full=%%F"
set "rel=!full:%~dp0=!"
set "name=%%~nF"
set "ext=%%~xF"
set "pages=N/A"
if /i "!ext!"==".pdf" (
:: 调用 pdfinfo 并输出到临时文件(安全处理带空格/特殊字符的路径)
"%pdfinfo%" "!full!" > "!tempfile!" 2>nul
:: 从临时文件中查找 Pages 行
for /f "tokens=2" %%P in ('findstr /R /C:"^Pages:" /C:"^页数:" "!tempfile!" 2^>nul') do (
set "pages=%%P"
)
)
:: 安全写入 CSV(字段用双引号包裹)
echo "!rel!","!name!","!pages!" >> "%output%"
)
:: 清理临时文件
del /q "%tempfile%" 2>nul
echo.
echo 成功生成:%output%
pause



















