首页 > 解决方案 > 如何计算具有特定名称的文件夹数量并删除最旧的文件夹

问题描述

我需要一个批处理文件来计算具有特定名称的文件夹,如果有多个,应该删除最旧的。文件夹命名为:

"01. Daily Backup 20190219", 
"01. Daily Backup 20190218" and 
"01. Weekly Backup 20190210". 

其中,我只需要"01. Daily Backup 20190218"删除文件夹。

通过以下方式计算所有文件夹相当容易:

for /f %%a in ('dir /b /ad %folder%^|find /c /v "" ') do set count=%%a
echo %count%

我无法根据文件夹名称添加计数条件,例如“01. Daily*”,也无法删除较旧的。非常感谢您的帮助。

标签: windowsbatch-filecmd

解决方案


这是一个使用01. Daily Backup*仅以开头的文件夹的场景,看到这是您给出的唯一示例。

@echo off
set "folder=01. Daily Backup*"

 for /f "delims=" %%i in ('dir /b /ad /o-d "%folder%"') do set "todel=%%i"
 for /f %%a in ('dir /b /ad "%folder%" ^| find /c /v ""') do set "count=%%a"
 if %count% gtr 1 echo rmdir /S "%todel%"

所以我们将dir所有文件夹,按日期排序(最新的在前)仅将最后一个文件夹设置为变量。然后如果计数器大于一,则删除设置为变量的文件夹。

注意,这还没有执行实际的删除,它只是简单地回显它,执行 rmdir 命令,echo从最后一行删除。

编辑 看到您只想保留最新文件夹并删除其余文件夹,只需执行此操作(再次,@echo从行中删除以执行实际任务):

@for /f "skip=1 delims=" %%i in ('dir /b /ad /o-d "01. Daily Backup*"') do (
  @echo @rmdir /s "%%i"
)

推荐阅读