编写批处理脚本提取各子文件夹最新PDF文件信息生成CSV
解决方案:批量提取各子目录最新PDF文件并生成CSV
直接使用以下批处理脚本即可实现需求,它会递归遍历指定目录下的所有子文件夹,每个文件夹仅保留最新修改的PDF文件,并将结果写入CSV:
@echo off setlocal enabledelayedexpansion :: 写入CSV表头 echo "文件路径","文件名","修改日期" > LatestFiles.csv :: 递归遍历所有子目录 for /f "delims=" %%d in ('dir /s /b /ad') do ( :: 按修改日期倒序取当前目录下的第一个PDF文件(最新的) for /f "delims=" %%f in ('dir "%%d\*.pdf" /b /a-d /o-d /t:w 2^>nul') do ( :: 提取文件信息 set "fullPath=%%~dpnxf" set "fileName=%%~nf%%~xf" set "modDate=%%~tf" :: 追加到CSV echo "!fullPath!","!fileName!","!modDate!" >> LatestFiles.csv :: 仅保留第一个结果,跳出内层循环 goto :nextDir ) :nextDir ) echo 处理完成,结果文件:LatestFiles.csv type LatestFiles.csv endlocal
关键逻辑说明
- 延迟变量扩展:
setlocal enabledelayedexpansion确保循环内部能实时读取变量值,避免变量替换错误。 - 目录遍历:
dir /s /b /ad递归获取所有子目录路径,不包含文件。 - 最新文件筛选:
dir "%%d\*.pdf" /b /a-d /o-d /t:w指定按修改日期(/t:w)倒序(/o-d)排列,只取第一个结果就是该目录下最新的PDF;2^>nul用来忽略无PDF文件目录的错误提示。 - CSV格式化:提前写入表头,每个文件的路径、文件名、修改日期用双引号包裹,符合CSV规范。
原脚本问题分析
- 第一段脚本仅处理当前目录,未递归遍历子文件夹,且变量赋值与输出语句语法错误,无法正确获取最新文件。
- 第二段脚本会导出所有PDF文件,没有按目录筛选每个文件夹的最新文件,不符合需求。
内容的提问来源于stack exchange,提问作者habude
相关产品推荐
相关产品推荐

