如何指定搜索目录,按日期范围搜索小于X KB的文件及批处理问题
问题原因
你的代码存在两处核心错误:
- 语法错误:引号未闭合
你插入的大小筛选代码Forfiles /S /M * /C "cmd /c if @fsize LSS 120000 echo @file末尾缺少闭合/C参数的双引号,直接导致批处理语法解析失败无法运行。 - 逻辑错误:过滤条件不匹配
原有两层forfiles嵌套的作用是筛选出日期在2021年3月1日到2021年8月24日之间的文件,结果存在变量%%B中。但你替换后新增的forfiles命令直接遍历所有文件,完全没有用到前面的日期过滤结果,即使修复语法,输出结果也不符合预期。
修复方案
不需要额外嵌套第三层forfiles,直接在第二层日期过滤的forfiles命令中加入大小判断即可,修复后的完整代码如下,你可以直接修改开头的变量调整参数:
@echo off setlocal :: 按需修改以下三个参数即可 set "END_DATE=24-08-2021" set "START_DATE=01-03-2021" set "MAX_SIZE=120000" FOR /F "delims=" %%A IN ('forfiles /d -%END_DATE% 2^>nul') DO ( forfiles /m "%%~A" /d +%START_DATE% /c "cmd /c if @fsize LSS %MAX_SIZE% echo @path" 2>nul )
可选调整说明
- 如果只需要输出文件名不需要完整路径,将代码中的
@path替换为@file即可 - 如果需要递归搜索当前目录下所有子目录的文件,在第一个
forfiles后添加/S参数即可 - 注意
forfiles的日期格式需要和你系统的区域设置保持一致,若出现无结果的情况可检查系统日期格式是否为日-月-年
内容的提问来源于stack exchange,提问作者Soeren Mejlby
相关产品推荐
相关产品推荐

