还是工作中碰到的问题,有个存储系统上,每天会有一些链接错误的文件夹遗留在待处理的目录,这里以huahuoding为例。
需要定时清理掉,本来想得很复杂,打算用vb和windows shell来写了。

后来网上搜到一个 forfiles命令,在windows server下可以用,windows 7也可以。很强大,参数及用法待会儿附到最后。
这里主要用到它的一个查找7天前的文件的功能,当然,这个7可以自定义。

基本的语法是

FORFILES /P d:huahuoding /D -7 /C "CMD /C ECHO @PATH"

以下是利用forfiles来移动huadhuoding目录下面早于7天的子目录:

@ECHO OFF
TITLE 每天晚上定时清理huahuoding文件夹

SET scheduleH=2230

:CURRENT
ECHO 当前时间:%time:~0,2%%time:~3,2% 计划时间:%scheduleH% 清理时间:早于7天
IF NOT EXIST D:TESTlogCLEAR_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%*.TXT (
IF %time:~0,2%%time:~3,2% EQU %scheduleH% (
FOR /F %%i IN ('dir /a:D /b d:huahuoding') DO FORFILES /P d:huahuoding%%i /D -7 /C "CMD /C ECHO @PATH & MOVE /Y @PATH d:TESTerrs" >> D:TESTlogCLEAR_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%time:~0,2%%time:~3,2%%RANDOM%.TXT
)
)
:NEXT
CSCRIPT /nologo wait.js 30
GOTO :CURRENT

--------------------------

Forfiles

语法

forfiles [/p ] [/m ] [/s] [/c""] [/d [{+ |-}] [{ | }]]

参数 说明
/p 指定从其开始搜索的路径。 默认情况下搜索当前工作目录中启动。
/m
根据指定的搜索遮罩文件中搜索。 默认的搜索掩码是*。 *。
/s
指示搜索子目录以递归方式为forfiles命令。
/c""
 每个文件上运行指定的命令。 应将命令字符串括在引号中。 缺省命令为"cmd /c 回显 @ 文件"。
 /d [{+ |-}] [{ | }]
 选择文件与指定的时间段内的上次修改日期。
 选择的文件的上次修改日期晚于或等于 (+) 或早于或等于 (-) 指定的日期, +日期 - 格式 MM/DD/YYYY 在哪里。 日期+-

选择文件的上次修改日期晚于或等于 (+) 与当前日期加上指定天数,或早于或等于 (-) 指定当前日期减去的天数。+- -

天 天 的有效值范围 32,768 中包含任意数量。 如果没有指定,默认情况下使用+ 。

/?
在命令提示符下显示帮助。
备注 Forfiles最常用在批处理文件中。
Forfiles /s是类似于dir /s.
您可以使用以下变量由/c命令行选项指定的命令字符串中。

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

与forfiles,请执行下列任一操作:

通过使用/d参数选择的绝对日期或相对日期的文件。

通过使用变量,例如 @ FSIZE 中生成的文件归档树和 FDATE @。

文件有别于目录使用 @ ISDIR变量。

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

通过实施循环子目录标志工具,旨在处理单个文件 forfiles。

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

forfiles /p c: /s /m *.bat /c"cmd /c 回显 @ 文件是一个批处理文件"

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

forfiles /p c: /s /m *。 * /c"cmd /c = 如果 @ isdir = true 回显 @ 文件是一个目录"

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

forfiles /s /m *。 * /d-365 /c"cmd /c 回显 @ file 是至少一年以前。

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

forfiles /s /m *。 * /d-01/01/2007年 /c"cmd /c 回显 @ file 是过时。

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

forfiles /s /m *。 * /c"cmd /c 回显 @ 文件的扩展名是 0x09@ext"

来自:http://technet.microsoft.com/zh-cn/library/cc753551(v=ws.10).aspx