文件之windows系统定时删除过期文件

目录

一、bat文件编写脚本

二、使用定时任务执行

三、定时任务执行脚本不成功处理方法

四、讲解脚本

总结

遗留的问题


一、bat文件编写脚本

注:脚本使用命令行窗口执行,在powershell中会出问题

删除5天前文件脚本

注:也可指定删除月、周、分钟输入schtasks /create /?查看文档
注:删除文件脚本, 可以指定文件类型和删除几天之前的数据
注:内容已测试。

REM -5指保留5天以内修改的文件,5天之前的数据进行删除
REM 如当前时间为2024-03-21日, 保留21,20,19,18,17号数据, 则16,15,...之前的数据进行删除
REM cmd命令行可使用forfiles /?查看参数帮助说明。
REM /p 指定轮询目录的起始位置
REM /s 递归子目录查找
REM /m 匹配规则, 如*.*匹配所有类型的文件, 若使用 * 则会将文件夹进行了匹配
REM /d 匹配的时间,0:查询24小时内的数据,-1:查询1天前的数据,-7:查询7天前的数据
REM /c 执行命令。@path:输出查询到的文件或文件夹的绝对路径,如f:\xx\xx\file.txt

@echo off  
setlocal enabledelayedexpansion  
set beforeday=-5
forfiles /p f:\xx\xx /s /m *.* /d %beforeday% 2>nul /c "cmd /c del /s /q @path"
endlocal

注:特别说一下命令中的 2>nul 可以忽略forfiles命令在搜索文件时异常日志打印
在这里插入图片描述

二、使用定时任务执行

注:命令行创建定时任务
注:/ru 指定的用户可以更换,如Administrator

schtasks /create /tn "del" /tr "F:\xx\xx\for.bat" /sc MINUTE /ru SYSTEM

在这里插入图片描述
注:创建定时任务后,将脚本进行修改,仍旧可以生效
在这里插入图片描述

三、定时任务执行脚本不成功处理方法

1. 解释

注:原因是当前登录的系统用户没有加入到administrators用户组。因为该用户组有执行批处理的权限
注:也就是将下方图片中显示的【定时任务执行用户】加入到administrator用户组
在这里插入图片描述在这里插入图片描述

2. 添加到用户组的操作方法

注:操作方法。
命令行输入compmgmt.msc 回车
在这里插入图片描述
在这里插入图片描述

四、讲解脚本

注:dir /b /a-d | findstr /v /x "."

/b # 输出基本信息,如文件名 brief
/a # 输出属性 attribute
-d # 不包含目录 directory

总结

1. 吐槽

使用 [》》](https://blog.csdn.net/dafei5210/article/details/113460413?spm=1001.2014.3001.5506) 此链接测试发现删除文件可行,但是删除文件夹不起作用。
有可能是参数有问题

2. 不一样的系统环境执行后效果不同

注:下图是在 windows server 2016 上执行后的命令窗口截图, 卡在哪里。但在本机电脑win11专业版不会发生这样的问题
注:这个问题还没有得到解决。目前手动关闭就可以了。
在这里插入图片描述

3. 还可删除多个文件夹中的内容

在这里插入图片描述

4. 也可使用powershell

也可使用powershell脚本进行操作。但时间有限,这里只做cmd命令行的操作,后期如果有机会优化会更新此篇文章

5. 方便的操作

注:停掉定时任务. 找到定时任务名称使用/change方式禁用即可

schtasks /change /tn rmfile /DISABLE

在这里插入图片描述

遗留的问题

注:此脚本是删除空文件夹
问题:errorlevel 变量即使在文件夹是空的 也一直是0(0:命令执行成功,非0:失败)有哪位高手、大神如果有幸能够知道问题所在,给我留言吧

@echo off  
setlocal enabledelayedexpansion  
set "folder=E:\2024-02-28"  
set "daysAgo=0"  
  
rem 检查目录是否存在  
if not exist "%folder%\" (  
    echo Folder does not exist.  
    exit /b 1  
)  
  
rem 查找修改时间早于7天前的目录,并检查是否为空,然后删除  
for /f "delims=" %%D in ('forfiles /p "%folder%" /s /d -%daysAgo% /c "cmd /c if @isdir==TRUE echo @path"') do (  
    rem 初始化一个标志,用于标记目录是否为空  
    set "isEmpty=true"  
    echo %%D
    rem 检查文件夹中是否有文件或子目录  
    dir /b /a /s "%%D" | findstr /v /x "." >nul  
    if errorlevel 0 (  
        rem 如果找到了文件或子目录,则将标志设置为false  
        set "isEmpty=false"  
    )  
    echo !isEmpty!  
    if "!isEmpty!"=="true" (  
        echo Deleting empty folder: %%D  
	
    )  
)  
  
echo All empty folders modified more than %daysAgo% days ago have been deleted.  
endlocal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡斌附体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值