Date 如果根目录中的文件夹超过3个,则批处理文件删除最旧的文件夹

Date 如果根目录中的文件夹超过3个,则批处理文件删除最旧的文件夹,date,batch-file,backup,directory,Date,Batch File,Backup,Directory,我现在有一个批处理文件,其中所有超过22天的文件夹都将被删除。当批处理文件每周运行时,没有问题,根目录中始终有4个文件夹。 但当有假期时,系统会关闭长达3周。当该文件在该假期后运行时,将删除3个文件夹 我现在正在搜索一个命令,其中只有最旧的文件夹将被删除,因此我将保留4个文件夹,以便随时进行备份 这些文件夹的名称类似于backup_YYYY-MM-DD 感谢您研究我的问题。使用以下批处理代码,或多或少只需一个命令行,即可轻松完成此任务: @echo off for /F "skip=3 deli

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

我现在正在搜索一个命令,其中只有最旧的文件夹将被删除,因此我将保留4个文件夹,以便随时进行备份

这些文件夹的名称类似于backup_YYYY-MM-DD


感谢您研究我的问题。

使用以下批处理代码,或多或少只需一个命令行,即可轻松完成此任务:

@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"
由于
/AD
的原因,命令DIR只返回裸格式的目录名,因为
/B
的原因,并且由于在目录
C:\Temp
中找到的
/O-N
的原因,命令按名称顺序颠倒

按名称反向排序会自动使用日期格式
YYYY-MM-DD
,也会按日期反向排序。通过命令DIR首先输出最新的备份文件夹,最后输出最旧的文件夹

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

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

注意:命令DIR在这里只返回备份文件夹名称,而不返回路径,因此父文件夹路径必须在代码中写入两次,一次写入命令DIR,另一次写入命令RD

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • dir/?
  • 获取/?
  • rd/?

另请参阅Microsoft关于的文章。

这不是问题,而是任务请求!如果你希望得到帮助,你需要先表现出你自己的努力!我们不会免费为您编写代码!请学习!为什么这么严厉?我是这个论坛的新成员,很抱歉没有阅读“如何使用aks”。我将很快更新我的帖子;)非常感谢。它看起来像是一种魅力。下次我会在我的第一篇文章中添加我在发布之前尝试过的内容。