抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

随着时间的推移,日积月累,服务器上会产生很多缓存和临时文件等,如果手动去删除显然是不方便也是不合理的,还容易导致误删文件。Windows平台下有一个 Forfiles 命令可以很轻松地帮我们再完成这项任务。

比如,当前需要删除位于 D:\TempFiles 目录下的半年前的所有文件,直接在命令行执行:

$ forfiles /p D:\TempFiles /s /m * /d -180 /c "cmd /c del @path"


参数说明

forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]

/p <Path> 表示开始搜索的路径。默认文件夹是当前工作的目录 (.)

/m searchmask 根据 searchmask 指定的搜索通配符来搜索文件。默认搜索掩码是 ‘*‘。

/s 指示 forfiles 在子目录中搜索,类似 dir /s

/C command 为每个匹配到的对象执行命令。带空格命令字符串需用双引号括起来。默认命令是 "cmd /c echo @file"

​ 命令字符串中可使用变量:

`@file`    - 返回文件名(仅文件名)。                         

@fname - 返回不带扩展名的文件名。

@ext - 只返回文件的扩展名。

@path - 返回文件的完整路径(包含文件名)。

@relpath - 返回文件的相对路径。

@isdir - 如果文件类型是目录,返回 “TRUE”;如果是文件,返回 “FALSE”。

@fsize - 以字节为单位返回文件大小。

@fdate - 返回文件上一次修改的日期。

@ftime - 返回文件上一次修改的时间。

/d 使用方法:/d[{+ | -}] [{MM/DD/YYYY | DD}]

+ | -选择日期大于或等于 (+)或者小于或等于 (-)指定日期的文件

MM/DD/YYYY 指定的日期

DD 当前日期减去或者相加后的时间,有效范围 0 - 32768,比如示例中的半年前就是 /d -180

特别说明

要在命令行包括特殊字符,字符请以 0xHH 形式使用十六进制代码(例如,0x09tab)。调用内部 CMD.exe 命令前面应以 “cmd /c“ 开始。

示例

  • 列出当前目录(.)的 exe 文件

    $ forfiles /p . /s /m *.exe /c "cmd /c echo @file is a exe file"

  • 如果是目录就显示目录名,如果是文件就文件名,else 条件可以去掉,只要 if

    $ forfiles /p E:\workspace /s /m * /c "cmd /c if @isdir==TRUE (echo @file is a directory) else (echo @path)"

  • 显示超过 30 天的 txt 文件

    $ forfiles /p E:\workspace /s /m *.txt /d -30 /c "cmd /c echo @file"

  • 指定日期前(-)创建的文件,之后使用“+”

    $ forfiles /p E:\workspace /s /m *.* /d -06/02/2018 /c "cmd /c echo @file"

  • 显示符合条件文件扩展名

    $ forfiles /p E:\workspace /s /m *.* /d -06/02/2018 /c "cmd /c echo Extension of @file is @ext"

评论