批处理命令删除任务调度程序中指定目录下的所有目录和文件



我尝试在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 /?的使用情况)。

相关内容

  • 没有找到相关文章

最新更新