forfiles 命令详解(DOS批处理)forfiles 是 Windows 命令行工具,用于批量选择文件并执行命令。通常用于文件管理、批量删除、备份等操作。
forfiles [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -]日期]
| 参数 | 说明 |
|---|---|
/P pathname |
指定搜索的起始目录(默认为当前目录) |
/M searchmask |
文件匹配模式(支持通配符 和 ?),默认为 .* |
/S |
递归搜索子目录 |
/C command |
对每个文件执行的命令(用双引号包裹) |
/D [+/-]日期 |
按日期筛选文件(+:之后,-:之前,无符号:当天) |
/C command 中的变量在 /C 参数中可使用以下变量(区分大小写):
| 变量 | 说明 |
|---|---|
@file |
文件名(含扩展名) |
@fname |
文件名(不含扩展名) |
@ext |
文件扩展名 |
@path |
完整路径 |
@relpath |
相对路径 |
@isdir |
是否为目录(TRUE/FALSE) |
@fsize |
文件大小(字节) |
@fdate |
文件最后修改日期 |
@ftime |
文件最后修改时间 |
forfiles /C "cmd /c echo @file"
② 递归删除 30 天前的 .log 文件
forfiles /P C:\Logs /S /M *.log /D -30 /C "cmd /c del @path"
③ 备份 7 天内的 .txt 文件到备份目录
forfiles /P D:\Data /M *.txt /D -7 /C "cmd /c copy @path E:\Backup"
④ 显示文件详细信息
forfiles /C "cmd /c echo 文件名:@file 大小:@fsize 修改时间:@fdate @ftime"
⑤ 仅处理目录
forfiles /C "cmd /c if @isdir==TRUE echo 目录:@file"
/D 参数支持以下格式:
数字:天数(/D -7 表示 7 天前)MM/dd/yyyy:具体日期(/D 12/01/2023)/D 12/01/2023 表示该日期当天)"C:\Program Files")
危险操作:先使用 echo 测试,再执行删除/移动命令
时间范围:/D +30 表示 30 天后,/D -30 表示 30 天前
@echo off
chcp 65001 >nul
forfiles /P "D:\项目" /M *.tmp /S /D -90 /C "cmd /c echo 正在删除:@path && del @path"
echo 清理完成!
pause
如果系统支持,PowerShell 更灵活:
Get-ChildItem -Path "C:\Logs" -Filter *.log -Recurse | Where LastWriteTime -LT (Get-Date).AddDays(-30) | Remove-Item
掌握 forfiles 可轻松实现自动化文件管理,建议在测试环境中充分验证后再用于生产环境。