在運維中,我們經常遇到需要將某些特定數據定時自動備份到遠程主機的情況,並且實現自動刪除一定時間之前的數據,將如下的內容保存為批處理並使用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