如何计算具有特定名称的文件夹数量并删除最旧的

时间:2019-02-20 08:45:50

标签: windows batch-file cmd

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

"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 *”,也无法删除较旧的文件夹。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在这种情况下,使用的文件夹仅以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"
)

答案 1 :(得分:0)

@echo off
REM Location of Reliplan folders and files
set "dir=c:\temp\"
set "name=01. Daily Backup*"
:start
 for /f "delims=" %%i in ('dir /b /ad /o-d "%dir%%name%"') do set "todel=%%i"
 for /f %%a in ('dir /b /ad "%dir%%name%" ^| find /c /v ""') do set "count=%%a"
if %count% gtr 1 goto del
goto further
:del
rd /s /q "%dir%%todel%"
goto start
:further
if "%name%"=="01. Daily Backup*" (
   set "name=01. Weekly Backup*"
   goto start
)
if "%name%"=="01. Weekly Backup*" (
   goto end
)

:结束