我尝试在windows任务调度程序中设置任务。我要做的是删除给定目录中在过去30天内未修改的每个文件和目录。所以我设置任务如下:
程序/脚本:ForFiles
参数:/p "C:...baseFolder" /s /d -30 /c "cmd /c del /q @file"
但这只导致文件被擦除。此外,在此过程中刷新了文件夹的修改日期。如何删除C:...baseFolder
中的目录?
更新:
我现在的方法是这样的:
ForFiles /p "C:...baseFolder" /s /d -30 /c "cmd /c del /q @file" && FORFILES /S /D -30 /C "cmd /c IF @isdir == TRUE rmdir /S /Q "C:...baseFolder"
执行此批返回No files found with the specified search criteria
,即使有超过30天前修改的目录。
如果您想单独检查每个子树目录,那么使用初始的/S
选项,但不要执行目录的递归删除。这将删除所有不直接包含最近30天内修改的文件的目录。一旦完成,你还需要删除所有在过去30天内没有修改过的文件。更新代码方法的逻辑问题是,如果您先删除文件,那么它们的所有父子目录的修改日期可能被更新以反映今天的日期,这意味着没有子目录将通过第二个命令日期过滤器。
例如:
%SystemRoot%System32forfiles.exe /P "C:...baseFolder" /S /D -30 /C "%SystemRoot%System32cmd.exe /C If @IsDir==TRUE RD /Q @File"
%SystemRoot%System32forfiles.exe /P "C:...baseFolder" /S /D -30 /C "%SystemRoot%System32cmd.exe /C If @IsDir==FALSE Del /A /F @File"
由于这是一个批处理文件,因此不需要尝试将两个单独的命令链接到一行。
请注意,您最终可能会得到一些空目录,这些目录在上面的例子中没有得到满足。
建议对文件使用del
(就像你现在做的那样),对目录使用rmdir
(检查rmdir /?
的使用情况)。