forfiles

在文件或文件集上选择并运行命令。 此命令最常用于批处理文件。

语法

forfiles [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -] [{<date> | <days>}]]

parameters

参数 说明
/P <pathname> 指定从中开始搜索的路径。 默认情况下,搜索在当前工作目录中开始。
/M <searchmask> 根据指定的搜索掩码搜索文件。 默认搜索掩码为 *
/S 指示 forfiles 命令以递归方式在子目录中搜索。
/C <command> 在每个文件上运行指定的命令。 命令字符串应用双引号包装。 默认命令为 "cmd /c echo @file"
/D [{+\|-}][{<date> | <days>}] 选择指定时间范围内上次修改日期的文件:
  • 选择上次修改日期晚于或等于 (+) 或早于或等于指定日期) (- 的文件,其中 date 的格式为 MM/DD/YYYY。
  • 选择上次修改日期晚于或等于 (+ 的文件,) 当前日期加上指定的天数,或者早于或等于 (-) 当前日期减去指定的天数。
  • 天数的有效值包括 0-32,768 范围内的任意数字。 如果未指定符号, + 则默认使用 。
/? 在 cmd 窗口中显示帮助文本。

备注

  • 命令 forfiles /S 类似于 dir /S

  • 可以在 /C 命令行选项指定的命令字符串中使用以下变量:

    变量 说明
    @FILE 文件名。
    @FNAME 不带扩展名的文件名。
    @EXT 文件扩展名。
    @PATH 文件的完整路径。
    @RELPATH 文件的相对路径。
    @ISDIR 如果文件类型是目录,则计算结果为 TRUE。 否则,此变量的计算结果为 FALSE。
    @FSIZE 文件大小(以字节为单位)。
    @FDATE 文件的上次修改日期戳。
    @FTIME 文件的上次修改时间戳。
  • forfiles 命令允许对多个文件运行命令或将参数传递给多个文件。 例如,可以在扩展名为 .txt 的树中的所有文件上运行 type 命令。 或者,可以在驱动器 C 上 (*.bat) 执行每个批处理文件,并将文件名Myinput.txt作为第一个参数。

  • 此命令可以:

    • 使用 /d 参数按绝对日期或相对日期选择文件。

    • 使用 和 @FDATE等@FSIZE变量生成文件存档树。

    • 使用 @ISDIR 变量将文件与目录区分开来。

    • 通过使用字符的十六进制代码在命令行中包含特殊字符,例如, (为 0xHH 格式,0x09选项卡) 。

  • 此命令的工作原理是在设计为仅处理单个文件的工具上实现 recurse subdirectories 标志。

示例

若要列出驱动器 C 上的所有批处理文件,请键入:

forfiles /P c:\ /S /M *.bat /C "cmd /c echo @file is a batch file"

若要列出驱动器 C 上的所有目录,请键入:

forfiles /P c:\ /S /M * /C "cmd /c if @isdir==TRUE echo @file is a directory"

若要列出当前目录中至少有一年历史的所有文件,请键入:

forfiles /S /M *.* /D -365 /C "cmd /c echo @file is at least one year old."

若要显示当前目录中早于 2007 年 1 月 1 日的每个 文件的文本文件已 过时,请键入:

forfiles /S /M *.* /D -01/01/2007 /C "cmd /c echo @file is outdated."

若要以列格式列出当前目录中所有文件的文件扩展名,并在扩展名前添加选项卡,请键入:

forfiles /S /M *.* /C "cmd /c echo The extension of @file is 0x09@ext"