dos 删除指定日期前的文件

本文介绍了一个使用批处理脚本实现的自动备份文件清理工具。该脚本能够根据预设的天数删除过期的备份文件,适用于Windows环境。通过计算文件名中的日期并对比当前日期来确定是否删除,确保备份目录的整洁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@echo off&setlocal enabledelayedexpansion
:: 文件的格式为yyyy-mm-dd.*
:: 以下 dz=备份文件的路径
::      ds=为预定要保留的天数  (可修改,但不要大于28)
set dz=E:\bak
set ds=3
::取当前系统日期的 年、月、日
set dy=%date:~,4%
set dm=%date:~5,2%
::处理月份带0的,比如08,09,去掉前面的0,不然
::会被认为是8进制,导致错误。
::echo 去0前的月份值=%dm%
:again
if "%dm:~0,1%"=="0" (
    set dm=%dm:~1%
    goto again
)
::echo 去0后的月份值=%dm%
set dd=%date:~8,2%
::处理日带0的,比如08,09,去掉前面的0,不然
::会被认为是8进制,导致错误。
::echo 去0前的day值=%dd%
:againc
if "%dd:~0,1%"=="0" (
    set dd=%dd:~1%
    goto againc
)
::echo 去0后的day值=%dd%
echo 当前是  %dy%-%dm%-%dd%日

::计算应该删的文件的最新日期
set /a "feb=^!(%dy%%%4)+28"
if "%dy:~2,2%" equ "00" set/a "feb=!feb!-1+^!(%dy:~,2%%%4)"

set /a "dd-=%ds%"
if %dd% leq 0 (
   set n=0
   set/a dm-=1
   if !dm! equ 0 set/a "dy=%dy%-1,dm=0+12" 
   for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do (
       set/a n=!n!+1
       if !n! equ %dm% set/a "dd=!dd!+%%a"
    )
 )

set /a "ymd=!dy!*10000+!dm!*100+!dd!"
echo 要删除文件的最新日期为%ymd%以前的


pause

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值