windows bat 保留指定路径下一定数量的较近创建时间的文件夹

问题:

最近遇到在备份文件夹数量过多导致占用内存猛增的情况,手动删除还得每次都得想着,于是写了一个bat脚本放在定时任务中让它自动删除。

思路:

遍历指定路径下的所有子文件夹,并按照创建时间由新到旧排序,保留一定数量的子文件夹,其他文件夹直接删除。

解决:

1、使用 dir命令遍历路径中文件夹。

dir /ad /tc /b /o-d 按照创建时间逆序获取当前路径下所有子文件夹
dir命令属性:
在这里插入图片描述

2、bat for循环计数 和 enabledelayedexpansion延迟环境变量扩展、

循环计数,很好理解,就是在循环的过程中更新计数变量。

setlocal enabledelayedexpansion 是:设置本地为延迟扩展。其实也就是:延迟变量,全称"延迟环境变量扩展"。
在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。

如果不使用变量延迟,那么在批处理命令执行循环语句中用到外部变量的时候,外部变量将使用是初始值。

3、使用 rd 命令删除文件夹

在这里插入图片描述

so,最终的结果:

@echo on
rem 这里设置指定路径
set softPath=%~dp0
rem 设置保留文件夹的数量
set num=10
cd /d %softPath%
rem 开启变量延迟处理
setlocal enabledelayedexpansion
set /a count=0
for /f "delims=" %%i in ('dir /ad /tc /b /o-d') do (
	set /a count+=1
	rem 开启变量延迟处理后在循环内使用计数变量必须要用 !变量! 获取变量 注意是英文的! 
	rem 另外注意 bat的比较大小的语法
	if !count! GTR %num% (
		rem 删除指定文件夹
		rd /s /q %softPath%%%i
	)
)
endlocal
echo Done!

保存成 .bat文件,并添加到定时任务中。搞定!

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值