批处理命令删除任务计划程序中指定目录中的每个目录和文件

Batch command to delete every Directory and File in specified Directory in Task Scheduler

我尝试在 windows 任务计划程序中设置任务。我想要做的是删除给定目录中在过去 30 天内未修改的每个文件和目录。 所以我将任务设置如下:

Program/script: 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"

正在执行此批处理 returns No files found with the specified search criteria 尽管有 30 多天前修改的目录。

建议对文件使用 del(如您所用),对目录使用 rmdir(检查 rmdir /? 的用法)。

如果您想单独检查每个子树目录,请使用初始 /S 选项,但不要执行递归删除目录。这将删除所有不直接包含最近 30 天内修改过的文件的目录。完成后,您还需要删除过去 30 天内未修改的所有剩余文件。 更新代码方法的逻辑问题是,如果您先删除文件,则可能会更新其所有父子目录的修改日期以反映今天的日期,这意味着没有子目录会通过第二个命令日期过滤器。

例如:

%SystemRoot%\System32\forfiles.exe /P "C:\...\baseFolder" /S /D -30 /C "%SystemRoot%\System32\cmd.exe /C If @IsDir==TRUE RD /Q @File"
%SystemRoot%\System32\forfiles.exe /P "C:\...\baseFolder" /S /D -30 /C "%SystemRoot%\System32\cmd.exe /C If @IsDir==FALSE Del /A /F @File"

由于这是一个批处理文件,因此没有必要尝试将两个单独的命令链接到一行。

但是请注意,您最终可能会得到一些空目录,这些目录在上面的示例中并未得到满足。