能否使用forfiles命令按修改时间隐藏文件?命令执行异常咨询
解决forfiles按修改时间隐藏文件的问题
没问题,我来帮你排查问题并给出正确的实现方式!
你的命令为什么会隐藏所有文件?
你遇到的问题大概率是以下两个原因之一:
- 日期格式不匹配系统区域设置:forfiles的
/D参数完全依赖系统的日期格式。如果你的系统用的是DD/MM/YYYY(比如中文Windows默认格式),那01/15/2019是无效日期(15月不存在),此时forfiles会直接忽略日期筛选条件,对目录下所有文件执行隐藏命令。 - 筛选逻辑不符合预期:
/D +01/15/2019的作用是匹配修改时间晚于或等于2019年1月15日的文件,如果你的所有文件都满足这个时间条件,自然会被全部隐藏。
正确实现按修改时间隐藏文件
用forfiles完全可以实现按修改时间隐藏文件,根据你的需求分两种场景:
场景1:隐藏修改时间晚于/等于指定日期的文件
根据你的系统日期格式选择对应的命令:
- 若系统用美式格式
MM/DD/YYYY:
forfiles /P . /C "cmd /c attrib +h @file" /D +01/15/2019
- 若系统用中式格式
DD/MM/YYYY:
forfiles /P . /C "cmd /c attrib +h @file" /D +15/01/2019
场景2:隐藏修改时间早于/等于指定日期的文件
只需把+替换为-:
- 美式格式:
forfiles /P . /C "cmd /c attrib +h @file" /D -01/15/2019
- 中式格式:
forfiles /P . /C "cmd /c attrib +h @file" /D -15/01/2019
关键细节说明
- 一定要加上
@file:在/C的命令字符串里,@file代表当前匹配到的文件名,如果省略它,attrib命令会重复执行导致意外结果。 - 先验证再执行:不确定筛选结果的话,可以先执行以下命令查看匹配的文件列表:
forfiles /P . /C "cmd /c echo @file @fdate" /D +15/01/2019
这会列出符合条件的文件名和修改日期,确认无误后再替换成隐藏命令。
内容的提问来源于stack exchange,提问作者Amutha Vani Kamaraj




