1. 程式人生 > >SVN備份,一個強大腳本

SVN備份,一個強大腳本

svn

公司有臺SVN服務器,平時不經常備份。領導最近要求說要定期備份,於是整理了一個腳本,這個腳本是一個網友寫的吧,感覺不錯,然後就翻譯了一次。也收藏下,如果看著排版就把附件下載下來用notepad++看吧,在此也謝謝這個腳本的原創作者,感謝分享


@echo off ##關閉顯示處理過程。

rem -----設置環境變量-------##rem在cmd中是註釋的意思,和::差不多

rem -----設置SVN目錄-------- 
set svnpath=C:\Repositories\##set設置變量


rem -----設置SVN備份目錄------- 
set backuppath=E:\Backup\svn

rem -----備份時間--- 
set backupdate=%date:~0,4%%date:~5,2%%date:~8,2%##備份日期,格式為‘20170902‘
set backuptime=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%##備份日期,格式為‘2017-09-02‘


rem ----日誌文件路徑------ 
set LogFile=%backuppath%%backupdate%\svn.log
##設置備份的日誌文件,具體路徑套用上述設置的變量值

setlocal enabledelayedexpansion
##啟用延遲變量。具體不明白可以http://www.jb51.net/article/29323.htm

-----------------------------------------------------------    以上內容不會被打印到日誌    --------------------------------------------------------------

if not exist %backuppath%%backupdate% ( 
md %backuppath%%backupdate%
echo %backuptime% 創建備份目錄成功>> %LogFile%  
)

###以上做了一個if判斷,exist 是cmd判斷文件是否存在的命令 使用方法有 exist(存在)、not exist(不存在)
###判斷,如果 %backuppath%%backupdate% 不存在則執行()裏面的語句進行創建備份目錄。
###cmd下的for語句學習:http://blog.csdn.net/xhhjin/article/details/7373524
###如果在linux或者cmd中命令執行有問題,則可以通過 echo Command > debug.txt 的形式來打印執行信息,看是不是命令執行有問題,這也就是腳本排錯的精髓




echo ------------------------------------------- >> %LogFile% 
echo %backuptime% 開始備份SVN操作>> %LogFile% 
echo ------------------------------------------- >> %LogFile%  


for /f %%I in (‘dir %svnpath% /a:d /b‘) do (
if exist %svnpath%%%I\hooks (
md %backuppath%%backupdate%\%%I
##  dir %svnpath% /a:d /b   列出%svnpath%下的信息,將此過程傳遞給定義的%I變量
##判斷如果存在這個路徑,則執行()內的內容
##根據判斷存在,進行此步創建


    echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:開始備份%%I >> %LogFile%
## 打印當前時間,在log中標註此過程為開始備份

svnadmin hotcopy %svnpath%%%I  %backuppath%%backupdate%\%%I
##svnadmin hotcopy進行熱備一份到備份文件夾下

    echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:完成備份%%I >> %LogFile%
##打印當前時間,在log中標註此過程為開始備份

    echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:開始壓縮%%I >> %LogFile%
##打印當前時間,在log中標註此過程為開始壓縮

"C:\Program Files\HaoZip\HaoZipC.exe" a -tzip %backuppath%%backupdate%\%%I.zip %backuppath%%backupdate%\%%I >> %LogFile%
##調用好壓命令,根據已經備份的文件夾進行壓縮,並打印壓縮過程

    echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:完成壓縮%%I >> %LogFile%
##打印當前時間,在log中標註此過程為完成壓縮

    echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:開始刪除%%I目錄>> %LogFile%
##打印當前時間,將刪除目錄的時間記錄到log日誌中
rd %backuppath%%backupdate%\%%I /s/q
##所有文件全部壓縮後,刪除未被壓縮文件,保留已經壓縮備份的文件

    
echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:完成刪除%%I目錄>> %LogFile%
##將此階段在日誌中標註為刪除目錄已完成
)
)
echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:SVN備份完成>> %LogFile%


echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:開始刪除歷史備份版本>> %LogFile%


-----------------------------------------------------------  以上備份全部完成,以下為刪除歷史備份文件    --------------------------------------------------------------


rem 以下為刪除歷史備份信息,並設置最大保留備份數量
set maxNum=31
for /f "skip=%maxNum%" %%I in (‘dir %backuppath% /a:d /o:-d /b‘) do (
rd %backuppath%%%I /s/q
   echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:刪除%%I成功>> %LogFile%
)
echo %date:~0,4%-%date:~5,2%-%date:~8,2% !time:~0,2!:!time:~3,2!:!time:~6,2!:完成刪除歷史備份版本>> %LogFile%
@echo on


本文出自 “小小小平凡” 博客,謝絕轉載!

SVN備份,一個強大腳本