批处理文件删除最旧的文件夹,如果root中有超过3个文件夹

时间:2016-07-25 07:09:49

标签: date batch-file backup directory

我现在有一个批处理文件,其中所有早于22天的文件夹都将被删除。当批处理文件每周运行没有问题时,根目录中总会有4个文件夹。 但是当有假期时,系统会被关闭长达3周。在该假日之后文件运行时,将删除3个文件夹。

我现在正在搜索一个只删除最旧文件夹的命令,所以我会一直保留4个文件夹进行备份。

文件夹命名为backup_YYYY-MM-DD。

感谢您查看我的问题。

1 个答案:

答案 0 :(得分:3)

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

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

命令 DIR 返回,因为/AD由于/B而只返回裸格式的目录名称,并且由于目录/O-N而按名称反向排序{1}}以名称C:\Temp开头。

按名称的相反顺序会导致日期格式backup_自动按日期顺序排列。首先输出最新的备份文件夹,最后输出最旧的文件夹 DIR

命令 FOR 会跳过命令 DIR 的前3行输出,因此会忽略3个最新的备份文件夹。所有其他备份文件夹均由 FOR 处理,导致使用 RD 命令将其删除。

命令 DIR 会向 STDERR 输出错误消息,如果它找不到与模式YYYY-MM-DD匹配的任何文件夹。通过将错误消息从 STDERR 重定向到设备 NUL backup_*会阻止此错误消息。必须使用2>nul在此处转义重定向运算符>,否则Windows命令解释程序会将^解释为错误的命令>的重定向,这将导致语法错误消息。

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

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

  • FOR
  • echo /?
  • dir /?
  • for /?

另请参阅Microsoft文章Using command redirection operators