forfiles 语法
forfiles命令选择一个或多个文件,并对它们执行另一个命令。 它可以选择文件的标准,包括文件名和修改时间。 它可以在命令行中使用,也可以作为批处理作业的一部分。
FORFILES [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -]{MM/DD/YYYY | dd}]
/P pathname | 开始搜索文件的路径。如果未指定,则使用当前目录(.)。 |
/M searchmask |
搜索名称与搜索掩码searchmask匹配的文件(以及目录,如果指定了/S选项)。 其中可能包含通配符。 默认的搜索掩码是“*”(星号),它匹配所有的文件和目录。 |
/S | 递归到子目录中,如“DIR /S”。 |
/C command | 在每个文件上执行命令,其中命令是命令字符串,用双引号括起来。 默认命令是“cmd /c echo @file”,它显示文件的名称。 以下变量可以在命令字符串中使用: @file—返回文件的名称,不包含路径信息。 @fname—返回不带扩展名的文件名。 如果文件有多个扩展名,例如file.txt。 doc,只有后面的扩展名被截断,例如file.txt的结果。 @ext—只返回文件的扩展名。 如果文件有多个扩展名,则只返回后面的扩展名。 @path—返回文件的完整路径,包括文件名。 @relpath—返回文件的相对路径。 @isdir——如果文件类型是目录,则返回TRUE,如果是文件,则返回FALSE。 @fsize—返回文件的大小,以字节为单位。 @fdate—返回文件的最后修改日期。 @ftime—返回文件的最后修改时间。 要在命令行中包含特殊字符,请对0xHH格式的字符使用十六进制代码 (例,对制表符使用0x09)。 所有命令都应该在前面加上“cmd /c”。 尽管如果命令是不需要参数的外部命令,可以省略它。 |
/D [+ | -]{MM/DD/YYYY | dd} |
使用“MM/DD/YYYY”格式选择最后修改日期大于或等于指定日期(+)或小于或 等于指定日期(-)的文件。 也可以选择文件的最后修改日期大于或等于(+)当前日期加上“dd”天,或小于或等于(-)当前日期 减去“dd”天。 有效的“dd”天数可以是0-32768范围内的任何数字。如果没有指定,则使用“+”作为默认符号。 |
forfiles 示例
forfiles /d -30
列出当前目录中在过去30天内未被修改的任何文件的名称。
forfiles /d -30 /c "cmd /c echo @path @fdate"
与上面的命令相同,但是显示带有文件名的完整路径,以及文件最后修改的日期。
forfiles /d +"03/15/2018"
列出当前目录中2018年3月15日以后修改的所有文件。
forfiles /d -"03/15/2018"
列出当前目录中2018年3月15日以后未修改的所有文件。
forfiles /m "*.txt" /c "cmd /c notepad @file"
对于当前目录中扩展名为.txt(文本文件)的每个文件,使用记事本打开该文件。
forfiles /m "*.jpg" /c "cmd /c mspaint @file"
对于当前目录中扩展名为.jpg (JPEG文件)的每个文件,使用Microsoft Paint打开该文件。
forfiles /s /p "C:\Users\myuser\Downloads" /m "*.zip" /d -"03/15/2018" /c "cmd /c move @path C:\oldfiles"
对于c:users失败myuser失败下载中的每个.zip (zip文件)或其子目录,如果该文件最后一次修改是在2018年3月15日之前,则将其移动到目录C:\oldfiles。
forfiles /s /p "C:\Users\myuser\backups" /m "*.zip" /d -90 /c "cmd /c del @path"
对于c:users失败myuser失败目录下的每个zip文件或其子目录,如果该文件在过去90天内没有被修改,则删除它。
forfiles /s /p . /m "*.zip" /c "cmd /c move @file @fname"
对于当前目录和所有子目录中的每个文件,删除文件名的扩展名(如果存在)。
如果文件名有多个扩展名,则只删除最后一个。例如,file.bak将被重命名为file, file.doc.bak将被重命名为file.doc。