下载目录堆了上千个临时文件、日志目录一个月涨了几个 G、网盘同步盘里全是重复的旧备份——手动删太累,装第三方工具又怕捆绑。
想写个定时清理脚本,搜了一圈发现 Windows 自带的 forfiles 就能干。但参数记不住,语法容易写错。我直接在 WorkBuddy 里描述需求:
"写一个 forfiles 命令,删除 D:\temp 下 30 天前的文件,要求先预览再执行,并解释每个参数。"
WorkBuddy 直接给出了完整命令、参数对照表,还提醒我"先用 echo 预览,确认无误再换成 del 正式执行"——这个提醒很关键,避免了误删。
下面把这份完整的脚本和避坑点分享出来。
forfiles 是 Windows 自带的命令行工具(Windows 7 及以上都有),作用是:选择一批文件,对每个文件执行指定命令。配合日期筛选,就是"删除 N 天前的旧文件"的官方解决方案。无需安装、无广告、一条命令解决。
forfiles /p 路径 /s /m 通配符 /d 天数 /c "命令"参数 | 含义 |
|---|---|
| 起始路径,默认当前目录 |
| 递归遍历子目录 |
| 文件名通配符,如 |
| 筛选30 天前修改的文件( |
| 对每个文件执行的命令,内部可用 |
命令里常用的变量:
@file 文件名(含扩展名)@fname 文件名(不含扩展名)@ext 扩展名@fsize 文件大小(字节)@fdate 最后修改日期forfiles /p "C:\Users\用户名\AppData\Local\Temp" /s /m *.* /d -30 /c "cmd /c del @file"逐行拆解:进入 Temp 目录 → 递归所有子目录 → 匹配所有文件 → 筛选 30 天前修改的 → 逐个删除。
forfiles /p "D:\logs" /s /m *.log /d -7 /c "cmd /c del @file"用 /m *.log 把范围锁死在日志文件上,其他格式的文件完全不受影响。
删错不可逆,所以先跑一遍预览再动手。把 del 换成 echo,只列出会被处理哪些文件:
forfiles /p "D:\temp" /s /m *.* /d -30 /c "cmd /c echo @file 上次修改: @fdate 大小: @fsize 字节"确认列表没问题,再把 echo 换成 del 正式执行。
/d -30 的边界:筛选的是"修改时间早于 30 天前"的文件,当天修改的不会中招。想更保险可以先跑场景三预览。/p 的路径必须用双引号包起来,否则报错。cmd /c 不能省:forfiles 内部执行命令需要显式调用 cmd /c,直接写 del @file 会不生效。把上面的命令存成 cleanup.bat,再用 Windows 任务计划程序设置每天凌晨自动运行一次,下载目录就永远保持清爽,不用再手动管。
@echo off
forfiles /p "C:\Users\用户名\Downloads" /s /m *.* /d -30 /c "cmd /c del @file"一句话总结:forfiles 是 Windows 隐藏的"文件清理神器",一条命令 + 计划任务,就能实现旧文件自动清理。这次从"描述需求 → WorkBuddy 生成脚本 → 预览确认 → 定时执行"全流程,几分钟就搞定了。下次系统盘又满了,先想想它。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。