回复 6# Batcher
我这段代码的用处是用来删除N天前的数据库备份文件,但是保留n-15天内的,每天的最后一个备份文件- @echo off
- ::注意,系统的默认日期格式应该为yyyy/mm/dd 否则会出问题
- ::---------变量设置区-------------
- ::这里注意,一定要打开enabledelayedexpansion,否则取的总是变量的初始值
- setlocal enabledelayedexpansion
- set sd=D:\mssql\backup
- ::设置需要操作的文件的前缀
- set mask="mylogistics_backup_*"
- set searchmask="mylogistics_backup_"
- ::设置N天前的文件每天保留一个最新备份
- set DaysAgo=3
-
- ::---------执行区------------
- cd /d "%sd%"
-
-
- for /l %%z in (%DaysAgo%,1,5) do (
- echo ---------------
- ::获取N天之前的日期
- for /f %%i in ('powershell -c "Get-Date (Get-Date).AddDays(-%%z) -uformat "%%Y/%%m/%%d""') do (
- set "DstDate=%%i"
- )
- echo process date is !DstDate!
- ::获取 第 n 天前最后创建的文件名(仅仅是一天的文件)
- set lastfile=0
- for /f "tokens=1,2,4" %%a in ('dir %mask% /tc ^| find %searchmask%') do (
- set createtime="%%a %%b"
- set latestTime="0"
- if /i !DstDate! EQU %%a ( if /i !createtime! GTR !latestTime! (set latestTime=!createtime! && set lastfile=%%c))
- )
- echo lastfile is !lastfile!
- ::删除第N天前文件,但是保留最后一个最后创建的文件(仅仅是一天的文件)
- for /f "tokens=1,2,4" %%a in ('dir %mask% /tc ^| find %searchmask%') do (
- if /i !DstDate! EQU %%a ( if /i !lastfile! neq %%c ( del %%c ))
-
- )
-
- )
- pause
复制代码
|