windows - 如何计算具有特定名称的文件夹数量并删除最旧的文件夹
问题描述
我需要一个批处理文件来计算具有特定名称的文件夹,如果有多个,应该删除最旧的。文件夹命名为:
"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*”,也无法删除较旧的。非常感谢您的帮助。
解决方案
这是一个使用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"
)
推荐阅读
- php - 如何让这个 PHP 脚本正确显示换行符?
- azure - ADF 为所有字段添加引号
- nativescript - 使用firebase运行android应用程序时无法在模块外使用import语句
- reactjs - 如何在 auth0 中使用 loginWithPopup()?
- mysql - macOS Catalina 上的 MySQL Community 8:无法通过 JDBC 连接到数据库
- c++ - Qt 中的复制、剪切、粘贴、重命名、撤消和重做
- python - 函数和 for 循环
- angular - 删除 Angular 2 后更新 UI
- c# - '填充无效,无法删除。' 当加密字节保存为字符串然后解密时
- python - 在 Django 中使用 Nibabel