Svn備份與Bandizip壓縮批處理程序

目的:爲了定時備份多個svn倉庫數據,使用批處理程序進行備份並Bandizip進行壓縮保存到指定位置,操做完成後彈出成功提示。算法

爲了完成以上目標,須要瞭解如下幾個方面:ide

  1. 批處理命令
  2. Svn命令
  3. Bandizip命令

1. 批處理命令

echo 命令

打開回顯或關閉請求回顯功能,或顯示消息。若是沒有任何參數,echo命令將顯示當前回顯設置。svn

語法
echo [{on|off}] [message]測試

示例:
@echo off / echo hello worldui

rem 命令

註釋命令,相似於在C語言中的/--------/,它並不會被執行,只是起一個註釋的做用,只有在編輯批處理時纔會被看到,主要用於方便修改。
:: 也具備rem的功能,但::和rem仍是有區別的。當關閉回顯時,rem和::後的內容都不會顯示;當打開回顯時,rem後的內容會顯示出來,然而::後的內容仍然不會顯示。spa

語法
Rem [註釋內容]命令行

示例:
Rem 你好。code

pause 命令

暫停命令。運行 Pause 命令時,將顯示下面的消息:
Press any key to continue. . .(或:請按任意鍵繼續. . .)orm

示例:
@echo off
:begin
copy G:*.* d:\back
echo 請插入另外一張光盤...
pause
goto beginblog

start 命令

調用外部程序,全部的DOS命令和命令行程序均可以由start命令來調用。如:startcalc.exe便可打開Windows的計算器。

經常使用參數:
MIN 開始時窗口最小化
SEPARATE 在分開的空間內開始 16 位 Windows 程序
HIGH 在 HIGH 優先級類別開始應用程序
REALTIME 在 REALTIME 優先級類別開始應用程序
WAIT 啓動應用程序並等候它結束
parameters 這些爲傳送到命令/程序的參數
執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。若是在命令腳本內執行,該新行爲則不會發生。

set 命令

顯示、設置或刪除變量。

  1. 顯示變量:set 或 set s 前者顯示批處理當前已定義的全部變量及其值,後者顯示全部以s開頭的變量及值。
  2. 設置和調用變量:例如set aa=abcd,就是把aa定義爲abcd。若是要調用這個變量,就把aa兩邊加上個百分號。
  3. 刪除變量:set aa= 此句命令便可刪除變量aa。若變量aa已被定義,則刪除變量aa;若aa還沒有定義,則此句命令無實質意義。

例如:
set aa=abcd
echo %aa%
pause
運行這段命令就會顯示"abcd"


須要說明的是,批處理中的變量是不區分類型的,不須要像C語言中的變量那樣還要區分int、float、char等。好比執行set aa=345後,變量aa的值既能夠被視爲數字345,也能夠被視爲字符串345。
set命令具備擴展功能,如用做交互輸入、字符串處理、數值計算等,屬於高級命令範疇。

for語句(循環結構)

for語句能夠實現相似於C語言裏面的循環結構,固然for語句的功能要更強大一點,經過不一樣的開關能夠實現更多的功能。for語句有多個開關,不一樣開關將會實現不一樣的功能。

  1. 無開關
    無開關的for語句可以對設定的範圍內進行循環,是最基本的for循環語句。其命令格式爲:
    FOR %%variable IN (set) DO command
    其中,%%variable是批處理程序裏面的書寫格式,在DOS中書寫爲%variable,即只有一個百分號(%);set就是須要咱們設定的循環範圍,相似於C語言裏面的循環變量;do後面的command就是循環所執行的命令,即循環體。
    無開關for語句舉例:
    @echo off
    for %%i in (a,"b c",d) do echo %%i
    pause>nul

  2. 開關/L
    含開關/L的for語句,能夠根據set裏面的設置進行循環,從而實現對循環次數的直接控制。其命令格式爲:
    FOR /L %%variable IN (start,step,end) DO command
    其中,start爲開始計數的初始值,step爲每次遞增的值,end爲結束值。當end小於start時,step須要設置爲負數。
    含開關/L的for語句舉例(建立5個文件夾):
    @echo off
    for /l %%i in (1,2,10) do md %%i
    pause

2. Svn命令

svnadmin dump

   將文件系統的內容轉儲到標準輸出。

概要
svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

描述
使用「dumpfile」可移植格式將文件系統的內容轉儲到標準輸出,將反饋發送到標準錯誤,導出的修訂版本從LOWER到UPPER。若是沒有提供修訂版本,會導出全部的修訂版本樹,若是隻提供LOWER,導出一個修訂版本樹。
若是Subversion的轉儲文件很大,你可使用--deltas來減少svnadmin建立的導出文件的大小。經過這個選項,就不會寫出每次修訂版本的內容,svnadmin dump只會寫出版本之間的區別。然而,建立增量導出文件的壞處―對CPU的要求更高,svndumpfilter不能夠對這個文件操做,並且非增量的轉儲文件能夠更好的壓縮。

選項
--revision (-r)
--incremental
--quiet
--deltas

例子

  1. 轉儲整個版本庫:
 
svnadmin dump /usr/local/svn/repos
 
SVN-fs-dump-format-version: 1
 
Revision-number: 0
 
* Dumped revision 0.
 
Prop-content-length: 56
 
Content-length: 56
 
  1. 從版本庫增量轉儲一個單獨的事務:
 
svnadmin dump /usr/local/svn/repos -r 21 --incremental
 
* Dumped revision 21.
 
SVN-fs-dump-format-version: 1
 
Revision-number: 21
 
Prop-content-length: 101
 
Content-length: 101
 

3. Bandizip命令

# Bandizip.exe <archive>
# Bandizip.exe <command> [<switches>...] <archive> [<files>...] [<path_to_extract>]
# Bandizip.exe <bcommand> [<switches>...] [<files>...]

<archive> 壓縮包

執行在設置中指定的操做。 一般只打開壓縮包。

<Commands> 命令

a : 添加文件到壓縮包
x : 用完整路徑解壓文件
t : 測試壓縮包完整性
d : 刪除壓縮包中文件
c : 建立新檔案(或覆蓋現有文件)
cd: 顯示「新建壓縮包」對話框

<BCommands> 批處理命令

bc:要壓縮的每一個文件/文件夾名稱。 若存在相同的壓縮包名,則以「文件名(2)」格式建立壓縮包。若未指定目標文件夾,則默認目標文件夾爲原始文件或文件夾所在的路徑。
bx: 將每一個壓縮包分別解壓到目標文件夾中。 若未指定目標文件夾,則默認目標文件夾爲每一個壓縮文件所在的路徑。
bt: 測試壓縮包

<Switches> 開關

- 中止開關掃描
-l:<0...9> 設置壓縮級別(0:存儲,5:默認,9:最大)
-r- 禁用遞歸(默認)
-r 啓用遞歸子目錄
-aoa 無需提示覆蓋所有現有文件
-aos 跳過已有文件的解壓
-aou 自動重命名解壓的文件
(例如,name.txt將被重命名爲name (2).txt)
-sfx:[{name}] 建立SFX壓縮包
-zopfli 使用Zopfli做爲默認壓縮算法
-p:{password} 設置密碼
-o:{dir} 指定目標文件夾
-y 全選「是」
-fmt:{fmt} 指定壓縮格式
(zip, zipx, exe, tar, tgz, lzh, iso, 7z, gz, xz)
-v:{size} 指定分卷大小 (-v:1000000 -v:1440k -v:100MB ...)

<Switches> (僅針對Banzip)

-email 壓縮並郵件發送
-target:dlg 顯示「目標路徑選擇」對話框
-target:auto 智能解壓到目標路徑
-target:name 按壓縮包名稱解壓到目標路徑中文件夾下

示例

1. 打開壓縮包

Bandizip.exe sample.zip

2. 新建壓縮包(覆蓋已有文件)

Bandizip.exe c c:\sample.zip c:\src\

Bandizip.exe c c:\sample.zip c:\src1\ c:\src2\

3. 添加文件到壓縮包

Bandizip.exe a c:\sample.zip c:\src\sample.txt

Bandizip.exe a c:\sample.zip c:\src\sample1.txt c:\src\sample2.txt

Bandizip.exe a c:\sample.zip c:\src*.txt c:\src*.jpg

4. 刪除壓縮包中文件

Bandizip.exe d c:\sample.zip sample.txt

Bandizip.exe d c:\sample.zip *.txt

5. 將壓縮包解壓到目標路徑

Bandizip.exe x -o:c:\dest\ c:\sample.zip

6. 添加文件到壓縮包,並設置密碼爲Passw0rd,無提示覆蓋所有已有文件並關閉對話框

Bandizip.exe a -y -p:Passw0rd test.zip c:\src d:\src

4. 完整代碼

 1 @echo off
 2 ::指定到Svn倉庫目錄
 3 E:  4 set work_path=D:\SvnRepertory  5 set back_path=D:\SvnBack  6 set zip_path=D:\SvnBackPackage  7 cd %work_path%  8 
 9 ::使用for循環讀取倉庫目錄下的全部倉庫文件夾名稱,並進行循環備份
10 for /d %%s in (*.*) do (
11 echo %work_path%\%%s 12 svnadmin dump %work_path%\%%s > %back_path%\%%s.bak 13 )
14 
15 ::根據當前時間建立壓縮包名稱
16 set "year=%date:~0,4%"
17 set "month=%date:~5,2%"
18 set "day=%date:~8,2%"
19 set "hour_ten=%time:~0,1%"
20 set "hour_one=%time:~1,1%"
21 set "minute=%time:~3,2%"
22 set "second=%time:~6,2%"
23 if "%hour_ten%" == " " (
24 set zipfile=%year%%month%%day%0%hour_one%%minute%%second%.zip 25 ) else (
26 set zipfile=%year%%month%%day%%hour_ten%%hour_one%%minute%%second%.zip 27 )
28 
29 ::使用Bandizip命令進行壓縮,在成功後彈窗提示操做完成,並打開備份目錄
30 Bandizip.exe c %zip_path%\%zipfile% %back_path% 31 mshta vbscript:msgbox("備份並壓縮成功,快去看看吧!",64,"提示")(window.close)
32 start %zip_path% 33 pause
34 exit
View Code

注意:若是彈出提示爲亂碼,則須要將文件另存爲ANSI格式

    1. 批處理命令簡介--百度百科
    2. svnadmin dump命令
    3. Bandizip命令行參數
相關文章
相關標籤/搜索