在服务器管理中,会经常用到数据备份以及删除过期备份数据的业务。
以下代买片段实现备份数据文件夹,并删除指定天数之前的过期备份数据。
- 本例系统时间格式为YYYY-MM-DD
backup.bat
@echo off
rem 备份今日数据
echo Today is %date:~0,10%
set sou_dir="C:\Program Files\MySQL\MySQL Server .\data"
set aim_dir="C:\sqlBack\%date:~0,10%\"
echo sou_dir is %sou_dir%
echo aim_dir is %aim_dir%
md aim_dir
xcopy /e /y /h %sou_dir% %aim_dir%
rem 计算指定天数之前的日期
set DaysAgo=
rem 假设系统日期的格式为yyyy-mm-dd
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
set /a PassDays-=%DaysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%
echo %DaysAgo% days ago is:%DstDate%
rem rd命令删除5天前的文件
rem /S 表示删除该目录下所有遍历的子目录和文件
rem /Q 删除目录时不提示确认,直接删除
rd /s /q C:\sqlBack\%DstYear%-%DstMonth%-%DstDay%
goto :eof
:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%&set mm=%&set dd=%
if %yy% LSS if %yy% LSS (set yy=%yy%) else (set yy=%yy%)
set /a dd=%dd%%%100,mm=%mm%%%100
set /a z=-mm,z/=,y=yy+-z,m=mm+*z-,j=*m+
set /a j=j/+dd+y*+y/-y/+y/-
endlocal&set %4=%j%&goto :EOF
:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%+,b=*a+,b/=,c=-b*,c/=,c+=a
set /a d=*c+,d/=,e=-*d,e/=,e+=c,m=*e+,m/=,dd=*m+,dd/=
set /a dd=-dd+e+,mm=-m/,mm*=,mm+=m+,yy=b*+d-+m/
(if %mm% LSS set mm=%mm%)&(if %dd% LSS set dd=%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
后使用定时任务执行此脚本即可
参考:http://www.cnblogs.com/xd502djj/archive/2011/12/31/2308605.html