我需要一个批处理文件,该文件将计算具有特定名称的文件夹,如果有多个,则应删除最旧的文件夹。文件夹名为:
"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 *”,也无法删除较旧的文件夹。非常感谢您的帮助。
答案 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
)
:结束