天天看点

Bat批处理备份文件夹、并删除指定日期前的过期文件夹

在服务器管理中,会经常用到数据备份以及删除过期备份数据的业务。

以下代买片段实现备份数据文件夹,并删除指定天数之前的过期备份数据。

  • 本例系统时间格式为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

继续阅读