目的:为了定时备份多个svn仓库数据,使用批处理程序进行备份并Bandizip进行压缩保存到指定位置,操作完成后弹出成功提示。

为了完成以上目标,需要了解以下几个方面:

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

1. 批处理命令

echo 命令

打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。

语法
echo [{on|off}] [message]

示例:
@echo off / echo hello world

rem 命令

注释命令,类似于在C语言中的/--------/,它并不会被执行,只是起一个注释的作用,只有在编辑批处理时才会被看到,主要用于方便修改。
:: 也具有rem的功能,但::和rem还是有区别的。当关闭回显时,rem和::后的内容都不会显示;当打开回显时,rem后的内容会显示出来,然而::后的内容仍然不会显示。

语法
Rem [注释内容]

示例:
Rem 你好。

pause 命令

暂停命令。运行 Pause 命令时,将显示下面的消息:
Press any key to continue. . .(或:请按任意键继续. . .)

示例:
@echo off
:begin
copy G:*.* d:\back
echo 请插入另一张光盘...
pause
goto begin

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. 完整代码

 @echo off
::指定到Svn仓库目录
E:
set work_path=D:\SvnRepertory
set back_path=D:\SvnBack
set zip_path=D:\SvnBackPackage
cd %work_path% ::使用for循环读取仓库目录下的所有仓库文件夹名称,并进行循环备份
for /d %%s in (*.*) do (
echo %work_path%\%%s
svnadmin dump %work_path%\%%s > %back_path%\%%s.bak
) ::根据当前时间创建压缩包名称
set "year=%date:~0,4%"
set "month=%date:~5,2%"
set "day=%date:~8,2%"
set "hour_ten=%time:~0,1%"
set "hour_one=%time:~1,1%"
set "minute=%time:~3,2%"
set "second=%time:~6,2%"
if "%hour_ten%" == " " (
set zipfile=%year%%month%%day%0%hour_one%%minute%%second%.zip
) else (
set zipfile=%year%%month%%day%%hour_ten%%hour_one%%minute%%second%.zip
) ::使用Bandizip命令进行压缩,在成功后弹窗提示操作完成,并打开备份目录
Bandizip.exe c %zip_path%\%zipfile% %back_path%
mshta vbscript:msgbox("备份并压缩成功,快去看看吧!",64,"提示")(window.close)
start %zip_path%
pause
exit

注意:如果弹出提示为乱码,则需要将文件另存为ANSI格式

    1. 批处理命令简介--百度百科
    2. svnadmin dump命令
    3. Bandizip命令行参数

Svn备份与Bandizip压缩批处理程序的更多相关文章

  1. winform程序,备份数据库+并压缩+并删除以前的备份

    说明:为了定时备份服务器上的数据库并压缩到指定目录,方便下载到本地而写本程序.配合windows的任务计划,可以达到定时备份数据库的目的. 程序需引用SQLDMO.DLL,如电脑上已安装sqlserv ...

  2. 用bat批处理程序通过DOS命令行删除所有的空文件夹

    用过gothub或者码云的同学都知道,不包含任何文件的空文件夹上传提交时不被允许的.当然你可以在空文件下创建.keep文件(或.gitkeep文件),然后就可以上传了. 但是如果空文件夹比较多,并且我 ...

  3. svn备份脚 本

    一直用这套脚本备份,脚本主体虽不是原创,但是从网上得到后因为不能运行也进行了些修改,前两天看到有人问关于SVN备份的问题,今天又把脚本整理了一下,解决了不能循环备份多个配置库的问题.希望对大家有所帮助 ...

  4. SVN备份批处理文件

    SVN备份批处理文件,亲测可用 另外,备份文件时获取文件名%%~ni 可改为%%~nxi,以避免文件名中有“.”号时,读取不完成,将.后面的当作后缀名 需要使用hotcopy 时,可以将关键代码进行相 ...

  5. SVN备份教程(三)

    上次的博文SVN备份教程(二)中,我们讲解了一下SVN定时备份的相关内容,同时我们又提出了一种新的SVN备份方案--自动备份. 1.简介 所谓自动备份,它实现的思路非常简单,就是利用SVN自带的hoo ...

  6. SVN备份教程(二)

    上次的博文中SVN备份教程(一)我们简单介绍了一下SVN备份是如何操作的,今天我们接着将上次的问题进行优化. 1.问题回顾 在讲之前,我们先来将上次的问题重申一下.之前的SVN备份存在的问题很简单,每 ...

  7. SVN备份教程(一)

    最近一段时间在项目中用到了SVN备份的相关内容,这里给大家做一个简单的教程,重点在于SVN备份环境的搭建过程中,大家学到的解决问题的思维方式. 1.分类 SVN备份主要分为两种:一种是远程备份,另一种 ...

  8. 定时任务备份数据库与windows批处理

    前言: 关于数据库备份的方法有很多,你可以在命令行执行mysqldump命令进行备份,也可以使用数据库管理工具,比如navicat进行数据库的备份. 但是以上数据库的备份都是可以单次备份,总不能要一个 ...

  9. Windows下SVN备份脚本

    本站备份:svn备份与还原_脚本_(dump命令) 以下是转载记录, 转自:https://wuxiaobai.win/archives/111 用法 svnadmin dump REPOS_PATH ...

随机推荐

  1. Hellow BeiJing

    DAY1: (#^.^#),今天是9.23日,离出发去北京还有7天,好像一切还是正常的样子. 先发一张图,这就是我们机房的日常: 但是o( ̄ヘ ̄o#)我听着我耳边的cys童鞋的rap就感觉事情仿佛没辣 ...

  2. 3D拾取技术

    在unity3d中用户通过触摸屏选中虚拟3D世界中的物体进行操控,就须要掌握3d 拾取技术. 3d拾取技术很的简单:由摄像机与屏幕上的触控点之间确定一条射线.由此射线射向3d世界, 最先和此射线相交的 ...

  3. C实现头插法和尾插法来构建单链表(带头结点)

    我在之前一篇博客<C实现头插法和尾插法来构建单链表(不带头结点)>中具体实现了怎样使用头插法和尾插法来建立一个不带头结点的单链表,可是在实际使用中.我们用的最多的还是带头结点的单链表.今天 ...

  4. linux安装oracleclient

    1.准备好所须要的安装包,http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html这个网 ...

  5. 物理读之LRU(近期最少被使用)的深入解析

    转载请注明出处: http://blog.csdn.net/guoyjoe/article/details/38264883 一组LRU链表包含LRU主链.LRU辅助链.LRUW主链,LRUW辅助链, ...

  6. redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用

    redis 突然大量逐出导致读写请求block   内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...

  7. [POJ2728] Desert King 解题报告(最优比率生成树)

    题目描述: David the Great has just become the king of a desert country. To win the respect of his people ...

  8. 用jquery给select加选中事件

    select在前端开发过程中很常用,现在我们要实现一个效果,那就是选中select中的某一项,执行事件,本来自己没怎么接触过这些,最后网上找了一些资料,自己研究了一下,把方法分享给大家,大家如果有需要 ...

  9. sicily 1000. LinkedList

    Description template <typename E> class LinkedList { private:     // inner class: linked-list ...

  10. BZOJ 3503 高斯消元

    思路: 高斯消元就好啦 注意每个格子最多只能和4个相邻 所以是 n*m*n*m*5 的 并不会TLE //By SiriusRen #include <cstdio> #include & ...