如果根目录中有 3 个以上的文件夹,则批处理文件删除最旧的文件夹

Batch file delete oldest folder if there are more than 3 folders in root

我现在有一个批处理文件,其中所有超过 22 天的文件夹都将被删除。当批处理文件每周运行时没有问题,根目录下总是有四个文件夹。 但是当有假期时,系统最多关闭三个星期。当文件在那个假期后运行时,将删除三个文件夹。

我现在正在寻找一个只删除最旧文件夹的命令,所以我会保留四个文件夹随时备份。

文件夹的命名方式类似于 backup_YYYY-MM-DD

通过使用以下批处理代码或多或少的单个命令行,可以轻松完成此任务:

@echo off
for /F "skip=4 eol=| delims=" %%I in ('dir "C:\Temp\backup_????-??-??" /AD /B /O-N 2^>nul') do rd /Q /S "C:\Temp\%%I"

命令 DIR returns 因为选项 /AD 只是目录名(属性目录)因为选项 /B 和由于在目录 C:\Temp 中找到的选项 /O-N 的名称与通配符模式 backup_????-??-??.

匹配,因此按名称反向排序

如果在文件夹名称中使用日期格式 YYYY-MM-DD,按名称倒序也会自动按日期倒序。通过命令DIR.

,最新的备份文件夹的名称最先输出,最旧的文件夹的名称最后输出

命令 FOR 跳过命令 DIR 输出的前四行,因此忽略了四个最新的备份文件夹。所有其他备份文件夹由 FOR 处理,导致使用命令 RD 删除它们。如果 DIR 找不到至少五个名称与模式 backup_????-??-?? 匹配的文件夹,则 FOR 无需处理任何内容。所以总是至少有四个备份文件夹,除非用户手动删除备份文件夹。

命令 DIR 如果找不到与模式 backup_????-??-?? 匹配的任何文件夹,则向 STDERR 输出一条错误消息. 2>nul 通过将错误消息从 STDERR 重定向到设备 NUL 来抑制此错误消息。重定向运算符 > 必须在此处使用 ^ 转义,否则 Windows 命令处理器会将 > 解释为命令 FOR 定位错误的重定向,这将导致语法错误消息。

注意:命令DIR returns这里只是没有路径的备份文件夹名称,因此父文件夹路径必须在代码中写两次,在命令DIR 以及命令 RD.

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • dir /?
  • for /?
  • rd /?

另请参阅有关 Using command redirection operators 的 Microsoft 文档。