现在的位置: 首页 > Windows > Windows Server > 正文
自动备份数据批处理
2013年03月07日 Windows Server ⁄ 共 3198字 自动备份数据批处理已关闭评论 ⁄ 被围观 5,391 views+

在运维中,我们经常遇到需要将某些特定数据定时自动备份到远程主机的情况,并且实现自动删除一定时间之前的数据,将如下的内容保存为批处理并使用windows计划任务可以很好的实现:

####################################

::设置备份保留天数

set k=3
::判断操作系统类型
ver   |   find   /i   "5.0."   >nul   &&  goto 2000
ver   |   find   /i   "5.1."   >nul   &&  goto xp
ver   |   find   /i   "5.2."   >nul   &&  goto xp
ver   |   find   /i   "6.1."   >nul   &&  goto xp

::根据系统类型取当前年、月、日
:2000
set dn=%date:~4,4%
set dy=%date:~9,2%
set dr=%date:~12,2%
goto jc

:xp
set dn=%date:~0,4%
set dy=%date:~5,2%
set dr=%date:~8,2%
goto jc

::检查是否闰年
:jc
set /a dns=%dn%/400*400
if %dns% EQU %dn% goto runnian
goto jc1

:jc1
set /a dns=%dn%/4*4
if %dns% EQU %dn% goto jc2
goto pingnian

:jc2
set /a dns=%dn%/100*100
if %dns% EQU %dn% goto pingnian
goto runnian

::如果是平年,对8,9两月做特殊处理
:pingnian
if %dy%==08 goto pdy8
if %dy%==09 goto pdy9
goto pnqt

::如果是8月,开始计算k天前日期,判断k天前是否为上月,对8,9两日做特殊处理
:pdy8
if %dr%==08 goto dr8
if %dr%==09 goto dr9
set /a dr=%dr%-%k%
set dd=%dr:~0,1%
set /a dys=8-1
if %dys% LSS 10 set dys=0%dys%
if %dd%==- goto pnjc
if %dd%==0 goto pnjc
goto beforek

::如果是9月,开始计算k天前日期,判断k天前是否为上月,对8,9两日做特殊处理
:pdy9
if %dr%==08 goto dr8
if %dr%==09 goto dr9
set /a dr=%dr%-%k%
set dd=%dr:~0,1%
set /a dys=9-1
if %dys% LSS 10 set dys=0%dys%
if %dd%==- goto pnjc
if %dd%==0 goto pnjc
goto beforek

::如果是其他月份,开始计算k天前日期,判断k天前是否为上月,对8,9两日做特殊处理
:pnqt
if %dr%==08 goto dr8
if %dr%==09 goto dr9
set /a dr=%dr%-%k%
set dd=%dr:~0,1%
set /a dys=%dy%-1
if %dys% LSS 10 set dys=0%dys%
if %dd%==- goto pnjc
if %dd%==0 goto pnjc
goto beforek

::如果是闰年,对8,9两月做特殊处理
:runnian
if %dy%==08 goto rdy8
if %dy%==09 goto rdy9
goto rnqt

::如果是8月,开始计算k天前日期,判断k天前是否为上月,对8,9两日做特殊处理
:rdy8
if %dr%==08 goto dr8
if %dr%==09 goto dr9
set /a dr=%dr%-%k%
set dd=%dr:~0,1%
set /a dys=8-1
if %dys% LSS 10 set dys=0%dys%
if %dd%==- goto rnjc
if %dd%==0 goto rnjc
goto beforek

::如果是9月,开始计算k天前日期,判断k天前是否为上月,对8,9两日做特殊处理
:rdy9
if %dr%==08 goto dr8
if %dr%==09 goto dr9
set /a dr=%dr%-%k%
set dd=%dr:~0,1%
set /a dys=%dy%-1
if %dys% LSS 10 set dys=0%dys%
if %dd%==- goto rnjc
if %dd%==0 goto rnjc
goto beforek

::如果是其他月份,开始计算k天前日期,判断k天前是否为上月,对8,9两日做特殊处理
:rnqt
if %dr%==08 goto dr8
if %dr%==09 goto dr9
set /a dr=%dr%-%k%
set dd=%dr:~0,1%
set /a dys=%dy%-1
if %dys% LSS 10 set dys=0%dys%
if %dd%==- goto rnjc
if %dd%==0 goto rnjc
goto beforek

::判断是否为k天前是否为2月,判断k天前是否为上一年
:pnjc
if %dys%==02 goto py02
goto y%dys%

:rnjc
if %dys%==02 goto ry02
goto y%dys%

::如果跨年
:y00
set /a dn=%dn%-1
goto y12

::如果跨月
:y01
set dy=01
set /a dr=%dr%+31
goto beforek

:y03
set dy=03
set /a dr=%dr%+31
goto beforek

:y05
set dy=05
set /a dr=%dr%+31
goto beforek

:y07
set dy=07
set /a dr=%dr%+31
goto beforek

:y08
set dy=08
set /a dr=%dr%+31
goto beforek

:y10
set dy=10
set /a dr=%dr%+31
goto beforek

:y12
set dy=12
set /a dr=%dr%+31
goto beforek

:y04
set dy=04
set /a dr=%dr%+30
goto beforek

:y06
set dy=06
set /a dr=%dr%+30
goto beforek

:y09
set dy=09
set /a dr=%dr%+30
goto beforek

:y11
set dy=11
set /a dr=%dr%+30
goto beforek

:py02
set dy=02
set /a dr=%dr%+28
goto beforek

:ry02
set dy=02
set /a dr=%dr%+29
goto beforek

:dr8
set /a dr=8-%k%
set dr=0%dr%
goto beforek

:dr9
set /a dr=9-%k%
set dr=0%dr%
goto beforek

::计算k天前日期,然后根据操作系统类型重置当前日期
:beforek
if %dr% LSS 10 set dr=0%dr%
set kday=%dn:~0,4%%dy:~0,2%%dr:~0,2%
ver   |   find   /i   "5.0."   >nul   &&  goto 2k
ver   |   find   /i   "5.1."   >nul   &&  goto 2k3
ver   |   find   /i   "5.2."   >nul   &&  goto 2k3
ver   |   find   /i   "6.1."   >nul   &&  goto 2k3

:2k
set today=%date:~4,4%%date:~9,2%%date:~12,2%
goto bak

:2k3
set today=%date:~0,4%%date:~5,2%%date:~8,2%
goto bak

::备份当日数据,并删除k天前陈旧数据
:bak
md E:\bak\home\%today%
net use \\db-01  密码 /user:用户名
xcopy \\db-01\data\*  E:\bak\data\%today%\ /c /E /y
if exist E:\bak\data\%kday% rd E:\bak\data\%kday% /q /s
exit
##################################################################

抱歉!评论已关闭.

×