forfiles是一款 windows 平台的软件工具,其中选择文件并运行一个命令来操作文件。文件选择标准包括名称和上次修改日期。命令说明符支持一些特殊的语法选项。它可以直接在命令行中使用,也可以在批处理文件或其他脚本中使用。
该forfiles命令最初作为加载项提供在Windows NT 资源工具包中。它成为Windows Vista的标准实用程序,作为新管理功能的一部分。
Forfiles:从文件夹或树中选择要进行批处理的文件。
forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]]
forfiles命令有几个命令行选项。如果没有给出选项或参数,它将输出当前目录中每个文件的名称。下面对一些参数进行简单介绍:
❑ /p Path
指定 Path,指定要从哪里开始搜索。默认的文件夹是当前工作目录,该目录通过键入句号 (.) 指定。
注:
1.路径应该由反斜杠分割,如D:\rui\test
2.不接受UNC路径(\ machine \ share)
❑ /m SearchMask
按照 SearchMask 搜索文件。默认的 SearchMask 是 *.*。
例如:我们想搜索rar文件 可以写为 /m *.rar
❑ /s
指示 forfiles 在子目录中搜索。默认情况下仅搜索单个指定目录。
注:如果不加此参数,只操作指定目录下这一级,反之指定目录下所有层级目录中的文件都会被操作。
❑ /c Command
在每个匹配的文件上运行指定的 Command,带有空格的命令字符串必须用双引号括起来。默认的 Command 是 “cmd /c echo @file”。
❑ /d[{+ | -}] [{MM/DD/YYYY | DD}]
根据上次修改日期选择文件。选择日期大于或等于 (+)(或者小于或等于 (-))指定日期的文件,有绝对日期和相对日期。
❑ /?
显示帮助消息(简要使用说明)。禁止文件搜索/命令执行。不得与任何其它参数一起使用。
下表列出了在 /c Command 命令字符串中能够使用的变量。
变量 | 描述 |
---|---|
@file | 返回匹配项的名称,双引号。 |
@fname | 返回匹配项的基名(没有文件扩展名),双引号。 |
@ext | 返回文件扩展名,双引号,没有前导点。如果文件有多个扩展名,则只返回最后一个。如果文件没有扩展名,则返回带引号的空字符串。 |
@path | 返回匹配项的完整路径,双引号,包括驱动器号和文件扩展名(如果有)。 |
@relpath | 返回匹配项的相对路径,双引号和相对于起始目录(由/ P给出)。每个路径以点和反斜杠(.\)开头。 |
@isdir | 如果文件类型是目录,返回 TRUE,否则返回 FALSE。 |
@fsize | 返回用字节表示的文件大小 |
@fdate | 返回文件上次修改的日期,采用当前用户的本地化日期格式。 |
@ftime | 返回文件上次修改时间,采用当前用户的本地化时间格式。 |
在给定日期参数的情况下,日期参数(/ D)根据上次修改日期选择文件。
date参数可以作为文字日期给出,格式为MM / DD / YYYY(不接受其他日期格式)。可替代地,日期参数可以被给定为一个数字,在这种情况下,它被认为是指在日龄时(即,天日期当前日期的前几天)。
如果date参数以减号( - )开头,则仅选择在给定日期或之前修改的文件(较旧的文件/先前修改过)。否则,仅选择在给定日期或之后修改的文件(较年轻的文件/稍后修改)。可以给出显式加号(+),但这是默认值。请注意,两种模式都在给定日期选择文件。无法仅在给定日期选择文件(也不在之前或之后)。
1.删除D:/rui下2天前的.bak的文件
forfiles /p D:\rui /s /m *.bak /d -2 /c "cmd /c del /f @path"
2.列出D盘上的所有.bat文件
forfiles /p D:\ /s /m *.bat /c "cmd /c echo @file"
--如果想加上说明文字,可以改动如下:
forfiles /p D:\ /s /m *.bat /c "cmd /c echo @file is a batch file"
3.列出D盘上的所有目录
forfiles /p D:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
4.列出D盘上5天前的所有文件
forfiles /p D:\ /s /m *.* /d -5 /c "cmd /c echo @file : date >= 5 days"
5.列出D盘上2021年1月1日以前创建的文件,并显示“file is quite old!”
forfiles /p D:\ /s /m *.* /dt-01011993 /c "cmd /c echo @file file is quite old!"
6.按列格式列出D盘上所有文件的扩展名
forfiles /p D:\ /s /m *.* /c "cmd /c echo extension of @file is 0x09@ext0x09"
参考:
https://blog.csdn.net/sandy9919/article/details/82932460?locationNum=12&fps=1