关闭

制作一个批处理文件(bat文件)来备份数据

919人阅读 评论(0) 收藏 举报

rem 具体测试的时候可以把下面语句设置为@echo on这样可以看到命令的执行结果
rem 也可以在最后面加上一句pause语句,执行完命令后不退出
rem 可以先测试日期目录变量,不做具体的事情,可以把copy,md,del,rmdir的语句前加rem 空格,注释前
@echo off
rem -------------------------------------get date
set dirname=%date%
rem 去除日期格式里面的分隔符-/*.:等,若是其他分隔符请另行加上
set dirname=%dirname:-=%
set dirname=%dirname:/=%
set dirname=%dirname:/=%
set dirname=%dirname::=%
set dirname=%dirname:.=%
rem 取时间后8位,根据环境,有些电脑可能要取前8位,因为日期格式不一样
set dirname=%dirname:~-8%
rem 到此为止,以上set部分主要是取得日期时间,前去掉分隔字符,然后再取前或后8位,得到20070929的形式
rem 最后是先慢慢测试下,看格式对不,比如电脑日期是不是2007929的形式(即0会去掉),相关帮助查看set /?在命令提示符下


rem ------------------------------------bak day data
rem 备份数据
rem 根据日期变量在指定的目录 d:/mrpbf 下创建 %dirname%子目录
md d:/mrpbf/%dirname%
rem 复制Mrp系统数据库文件 d:/mrp/data/*   到备份目录  d:/mrpbf/%dirname%
xcopy /Y /Q D:/mrp/data/* d:/mrpbf/%dirname%


rem 上面部分其实已经实现了按日备份,下面的可以删除掉
rem -------------------------------------------------------------
 rem 下面的部分要确保备份目录的磁盘空间能存一个月以上的数据空间,并且设置的目录绝对正确
rem -------------------------------------------------------------
rem 下面的部分看需要实现了,有一定危险


rem split date with year month day
rem -------------------------------------split
rem 以下把日期按年 4位 月2位 日2 位分开,要根据日期格式来判定各部分的位置,有些日期是年月日,有些是月日年等
set year=%dirname:~0,4%
set month=%dirname:~4,2%
set day=%dirname:~-2%

rem bak first day of month to month bak dir
rem -----------------------------------bak first day
rem 如果 日 部分为01,即每个月的1号就把该天的数据另外复制一份到一个按月备份的目录F:/mrpbfMonthYear/%dirname%
if "%day%"=="01" (
   md F:/mrpbfMonthYear/%dirname%
   xcopy /E /Y d:/mrpbf/%dirname% F:/mrpbfMonthYear/%dirname%
  )


rem 删除数据这部分比较危险,因为弄错了目录之类的,可能会删掉正常的数据,最好是手动去删除
rem 留一个月的数据备份就差不多了,所以就要删除前一个月该天的数据
rem delete a month ago data bak
rem ------------------------------------delete a month ago
rem 如果小于10月的话,就取09,08等的9,8就行了(后面一位)
if %month% LSS 10 (set month=%month:~-1%)
rem 把月份减1
set /A month=%month%-1
rem 把月份减1后,再把年月日合并起来就得到了要删除的目录名(上个月今天)
rem 如果-1得0,说明是当前是1月份,那么上个月就是去年12月份
if "%month%"=="0" (
   set year=%year%-1
   set month=12
   )

rem 如果减1后小于10,如123456789,前面就加0,变成010203......
if %month% LSS 10 (set month=0%month%)
set delDir=%year%%month%%day%
rem -----select a entry from follow
rem 两种方法,一种是删除目录,一种是删除目录下所有文件
rem del /Q /F /S d:/mrpbf/%delDir%
RMDir /Q /S d:/mrpbf/%delDir%


rem if day is 30,then delete last month 31day's bak Data
rem -----------------------------------delete 31
rem 原因有时候一个月只有30天,那么上个月有31号的31号的数据就会删不到,所以在30号的时候就判断下上个月是否有31号
rem 然后删除,一年一共才几个月,可以不这么做
rem 下面是大概思路,我并没有去实现
if "%day%"=="30" (
  rem set delLastDay=%year%%month%31
  rem RMDir /Q /S d:/mrpbf/%delLastDay%
  )
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:107747次
    • 积分:1549
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:43篇
    • 译文:0篇
    • 评论:21条
    最新评论