如何用批处理文件列出Windows 10中近7天创建/修改的文件?
批处理实现列出指定目录下近7天内创建/修改的文件
问题分析
你之前的代码依赖手动输入日期,且通过字符串解析DIR命令输出的日期容易因系统区域格式差异失效,导致无输出。下面是更可靠的解决方案,自动计算7天前的日期,无需手动输入,同时兼容Windows 10的日期格式。
完整代码
@echo off setlocal enabledelayedexpansion :: 设置结果输出路径(桌面的RecentFiles.txt) set "outputFile=%UserProfile%\Desktop\RecentFiles.txt" :: 获取用户输入的目标目录,默认当前目录 echo 请输入要扫描的目录(直接回车使用当前目录): set /p "targetDir=" if not defined targetDir set "targetDir=%cd%" :: 自动计算7天前的日期(格式:YYYYMMDD) for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a" set "today=!dt:~0,8!" set /a "7daysAgo=today-7" :: 遍历目录下所有文件(排除文件夹),筛选近7天内修改的文件 echo 正在扫描,请稍候... ( echo 近7天内创建/修改的文件列表: echo --------------------------- for /r "%targetDir%" %%f in (*) do ( :: 获取文件的修改日期(格式:YYYYMMDD) for /f "tokens=1,2 delims= " %%d in ('dir /tc "%%f" ^| findstr /i "%%~nxf"') do ( set "fileDate=%%d" :: 将日期转换为YYYYMMDD格式(适配dd/mm/yyyy或MM/dd/yyyy) if "!fileDate:~2,1!" equ "/" ( for /f "tokens=1-3 delims=/" %%x in ("!fileDate!") do set "fileDate=%%z%%y%%x" ) else if "!fileDate:~1,1!" equ "/" ( for /f "tokens=1-3 delims=/" %%x in ("!fileDate!") do set "fileDate=%%z%%x%%y" ) :: 对比日期,筛选符合条件的文件 if !fileDate! geq !7daysAgo! ( echo 日期:%%d 时间:%%e 路径:%%f ) ) ) ) > "%outputFile%" echo 扫描完成,结果已保存至:%outputFile% pause exit /b
代码说明
- 自动计算日期:通过
wmic获取系统当前日期,自动减去7得到7天前的日期,避免手动输入错误。 - 遍历文件:使用
for /r递归遍历目标目录及子目录下的所有文件,(*)确保只处理文件(排除文件夹)。 - 日期格式兼容:自动识别系统的日期分隔符,将文件日期转换为统一的
YYYYMMDD格式,避免因区域设置导致的解析错误。 - 结果输出:将符合条件的文件的日期、时间和完整路径输出到桌面的
RecentFiles.txt中。
使用方法
- 将上述代码保存为
RecentFiles.bat。 - 双击运行,按提示输入要扫描的目录(直接回车则扫描当前目录)。
- 扫描完成后,打开桌面的
RecentFiles.txt查看结果。
内容的提问来源于stack exchange,提问作者N. Blain
相关产品推荐
相关产品推荐

