加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2019-02-24 15:26:46)
分类: 运维

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

https://blog.csdn.net/u011481543/article/details/50674094
在服务器管理中,会经常用到数据备份以及删除过期备份数据的业务。 
以下代买片段实现备份数据文件夹,并删除指定天数之前的过期备份数据。

本例系统时间格式为YYYY-MM-DD
backup.bat
@echo off

rem 备份今日数据
echo Today is te:~0,10%
set sou_dir="C:\Program Files\MySQL\MySQL Server 5.6\data"
set aim_dir="C:\sqlBack\te:~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=5
rem 假设系统日期的格式为yyyy-mm-dd
call :DateToDays te:~0,4% te:~5,2% te:~8,2% PassDays
set /a PassDays-=ysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%
echo ysAgo% days ago is:%DstDate%

rem rd命令删除5天前的文件
rem /S 表示删除该目录下所有遍历的子目录和文件
rem /Q 删除目录时不提示确认,直接删除
rd /s /q C:\sqlBack\%DstYear%-%DstMonth%-%DstDay%


goto :eof

:DateToDays %yy% %mm% % days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%%0,mm=100%mm%%0
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF

:DaysToDate ys% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if % LSS 10 set dd=0%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%&goto :EOF

后使用定时任务执行此脚本即可
--------------------- 

Forfiles命令删除指定天数以前的文件或文件夹

https://blog.csdn.net/Smasegain/article/details/46759267

一.命令说明
forfiles命令可以方便的对批量文件进行筛选和批量处理,本次来学习这个命令是因为一个备份策略需求。命令帮助信息如下:
FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

描述:
    选择一个文件(或一组文件)并在那个文件上执行一个命令。这有助于批处理作业。

参数列表:
    /P    pathname      表示开始搜索的路径。默认文件夹是当前工作的目录 (.)。
    /M    searchmask    根据searchmask指定的搜索通配符来搜索文件。默认搜索掩码是 '*'。
    /S                  指导 forfiles 递归到子目录。像 "DIR /S"。
    /C    command       表示为每个匹配到的对象执行的命令。命令字符串应该用双引号括起来。默认命令是 "cmd /c echo @file"。下列变量可以用在命令字符串中:
                        @file    - 返回文件名(仅文件名)。
                        @fname   - 返回不带扩展名的文件名。
                        @ext     - 只返回文件的扩展名。
                        @path    - 返回文件的完整路径(包含文件名)。
                        @relpath - 返回文件的相对路径。
                        @isdir   - 如果文件类型是目录,返回 "TRUE";如果是文件,返回 "FALSE"。
                        @fsize   - 以字节为单位返回文件大小。
                        @fdate   - 返回文件上一次修改的日期。
                        @ftime   - 返回文件上一次修改的时间。
特别说明:
                        要在命令行包括特殊字符,字符请以 0xHH形式使用十六进制代码(例如,0x09 为 tab)。
                        调用内部 CMD.exe 命令前面应以 "cmd /c" 开始。
                        
    /D    date          通过文件的上次修改日期选择文件,主要有以下两种写法:
{+|-} "yyyy-mm-dd":表示其上一次修改日期大于等于(+),或小于等于(-)指定的日期;
{+|-} dd(范围:0-32768):表示上次修改日期大于等于当前日期加dd指定的天数(+),或小于等于当前日期减指定的天数(-),默认为加号

    /?                  显示此帮助消息。

示例:
    FORFILES /?
    FORFILES
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 在 30 前就被更改。"
    FORFILES /D 2001-01-01
             /C "cmd /c echo @fname 在 2001年1月1日就是新的。"
    FORFILES /D +2015-7-4 /C "cmd /c echo @fname 今天是新的。"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"


二.使用案例
本次备份需要保留某个路径下相关文件或文件夹31天,则命令如下(删除31天以前的test开头的所有文件和文件夹):
 forfiles /p C:\Users\Smase\Desktop /m "test*" /d -31  /c "cmd /c if @isdir==TRUE (rmdir /q /s @path) else (del /f @path)"


if条件表示:如果是文件夹则采用rmdir删除,如果是文件则用del命令强制删除。
--------------------- 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有