Windows 7 - 使用批处理脚本模拟Windows XP中的msbackup备份程序
Windows 7 - 使用批处理脚本模拟Windows XP中的msbackup备份程序
backup.bat
@ECHO OFF
ECHO.
ECHO backup.bat 0.1 Copyright (c) 2010 胡争辉 (huzhengh@gmail.com)
ECHO.
ECHO 本批处理程序用于在Windows 7上实现模拟Windows XP和之前版本的msbackup.exe程序的增量备份功能。运行本批处理程序请安装7-Zip(http://www.7-zip.org/),并把7z.exe文 件所在文件夹加入系统环境变量PATH中。
ECHO.
REM 运行本批处理程序需要在相同的文件夹 中放置temp.bat和process.check.bat两个程序
REM 由于不能模拟msbackup在备份 时的卷影复制功能,因此采用在备份前检查可能涉及到的进程,以保证备份文件没有被锁定
SETLOCAL ENABLEDELAYEDEXPANSION
SET method=
SET prompt_yes=
SET ignore_dir_list=
SET process_check_list=
SET backup_dir_list=
SET target_file=
SET syntax_error=0
:SYNTAX_CHECK
IF "%1"=="" GOTO PARAMETER_CHECK
IF /I %1 EQU /full (
IF DEFINED method (
ECHO 您 定义了两个备份方法,%method% 和 %1,请仅定义一个
GOTO HELP
) ELSE (
SET method=%1
SHIFT
GOTO SYNTAX_CHECK
)
)
IF /I %1 EQU /increment (
IF DEFINED method (
ECHO 您 定义了两个备份方法,%method% 和 %1,请仅定义一个
GOTO HELP
) ELSE (
SET method=%1
SHIFT
GOTO SYNTAX_CHECK
)
)
IF /I %1 EQU /difference (
IF DEFINED method (
ECHO 您 定义了两个备份方法,%method% 和 %1,请仅定义一个
GOTO HELP
) ELSE (
SET method=%1
SHIFT
GOTO SYNTAX_CHECK
)
)
IF /I %1 EQU /yes (
SET prompt_yes=%1
SHIFT
GOTO SYNTAX_CHECK
)
IF /I %1 EQU /ignore (
IF DEFINED ignore_dir_list (
ECHO 您 定义了两个忽略的文件夹的列表文件,%ignore_dir_list% 和 %2,请仅定义一个
GOTO HELP
) ELSE (
SET ignore_dir_list=%2
SHIFT
SHIFT
GOTO SYNTAX_CHECK
)
)
IF /I %1 EQU /process (
IF DEFINED process_check_list (
ECHO 您 定义了两个需要关闭的进程的列表文件,%process_check_list% 和 %2,请仅定义一个
GOTO HELP
) ELSE (
SET process_check_list=%2
SHIFT
SHIFT
GOTO SYNTAX_CHECK
)
)
IF NOT DEFINED backup_dir_list (
SET backup_dir_list=%1
SHIFT
GOTO SYNTAX_CHECK
)
IF NOT DEFINED target_file (
SET target_file=%1
SHIFT
GOTO SYNTAX_CHECK
)
ECHO 不可识别参数:%1
SET syntax_error=1
SHIFT
GOTO SYNTAX_CHECK
:PARAMETER_CHECK
IF /I "%method%" EQU "/full" (
SET method=full
)
IF /I "%method%" EQU "/increment" (
SET method=increment
)
IF /I "%method%" EQU "/difference" (
SET method=difference
)
IF NOT DEFINED method (
ECHO 请 使用 /full 或 /increment 或 /difference 指定备份的方法
SET syntax_error=1
)
IF /I "%prompt_yes%" EQU "/yes" (
SET prompt_yes=yes
)
IF NOT DEFINED backup_dir_list (
ECHO 请指定待备份的文 件夹的列表文件
SET syntax_error=1
)
IF NOT DEFINED target_file (
ECHO 请 指定备份的文件 名
SET syntax_error=1
)
IF DEFINED ignore_dir_list (
IF NOT EXIST !ignore_dir_list! (
ECHO 您 指定的忽略指定文件夹的列表文件 !ignore_dir_list! 不存在
SET syntax_error=1
)
)
IF DEFINED process_check_list (
IF NOT EXIST !process_check_list! (
ECHO 您 指定的备份前需要关闭的进程的列表文件 !process_check_list! 不存在
SET syntax_error=1
)
)
IF %syntax_error%==0 GOTO BEGIN
:HELP
ECHO 语法:
ECHO backup.bat /full ^| /increment ^| /difference [/yes] [/ignore ignore_dir_list]
ECHO [/process process_check_list] backup_dir_list target_file
ECHO.
ECHO /full 完全备份。备份指定位置所有的文件
ECHO /increment 增 量备份。备份自上次完全备份或增量备份以来所有更新
ECHO 的文件
ECHO /difference 差异备份。备份自上次完全备份以来所有更新的文件ECHO /yes 非 交互式运行,不显示确认提示
ECHO /ignore ignore_dir_list 指定忽略指定文件夹的列表文件,使用文本格式,每行是
ECHO 一个待备份的文件夹的名称,例如:
ECHO C:\Windows
ECHO /process process_check_list 指定备份前需要关闭的进程的列表文件,使用文本格式,
ECHO 每行是一个待关闭的进程的名称以及相应的消息说明,例
ECHO 如:
ECHO qq.exe 请关闭QQ
ECHO backup_dir_list 是待备份的文件夹的列表文件,使用文本格式,每行是一
ECHO 个待备份的文件夹的名称,例如:
ECHO C:\
ECHO target_file 是备份的文件名
GOTO :EOF
:BEGIN
IF "%prompt_yes%"=="yes" (
ECHO 非交互式运行
) ELSE (
ECHO 交互式运行
)
IF %method%==full ECHO 完全备份
IF %method%==increment ECHO 增量备份
IF %method%==difference ECHO 差异备份
ECHO 待备份的文件夹的列表文件:%backup_dir_list%
ECHO 备份的文件名:%target_file%
IF DEFINED ignore_dir_list (
ECHO 忽略的文件夹的列 表文件:%ignore_dir_list%
) ELSE (
ECHO 没有指定忽略指 定 文件夹的列表文件
)
IF DEFINED process_check_list (
ECHO 需要关闭的进程的 列表文件:%process_check_list%
) ELSE (
ECHO 没有指定备份前 需 要关闭的进程的列表文件
)
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
IF DEFINED process_check_list (
ECHO 需 要关闭的进程包 括:
FOR /F "tokens=1,2" %%i IN (%process_check_list%) DO (
ECHO %%i
)
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
CALL process.check.bat %process_check_list%
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
)
ECHO 待备份的文件夹包括:
SET BACKUP_DIR_EXIST=1
FOR /F "delims=" %%i IN (%backup_dir_list%) DO (
IF EXIST %%i (
ECHO %%i
) ELSE (
ECHO 待 备份文件夹不存在:%%i
SET BACKUP_DIR_EXIST=0
)
)
IF %BACKUP_DIR_EXIST%==1 (
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
) ELSE (
ECHO 待备份的文件夹 的 列表文件 %backup_dir_list% 中包含不存在的文件夹,请修改
PAUSE
GOTO :EOF
)
IF DEFINED ignore_dir_list (
ECHO 忽 略的文件夹包 括:
FOR /F "delims=" %%i IN (%ignore_dir_list%) DO (
ECHO %%i
)
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
)
CALL temp.bat
SET archive_file_list=%TEMP_PATH%\archive_file_list.txt
SET temp_file_list=%TEMP_PATH%\temp_file_list.txt
SET backup_file_list=%TEMP_PATH%\backup_file_list.txt
SET zip_file_list=%TEMP_PATH%\7zip_file_list.txt
FOR /F "delims=" %%i IN (%backup_dir_list%) DO (
ECHO 生成文件夹中待备 份文件列表: %%i
IF %method%==full (
DIR /A /A-D /B /ON /S "%%i" >> %archive_file_list%
) ELSE (
DIR /A /AA-D /B /ON /S "%%i" >> %archive_file_list%
)
)
IF DEFINED ignore_dir_list (
COPY %archive_file_list% %temp_file_list%
FOR /F "delims=" %%i IN (%ignore_dir_list%) DO (
ECHO 过 滤指定的文件夹:%%i
MORE %temp_file_list% | FIND /I /V "%%i" > %backup_file_list%
COPY %backup_file_list% %temp_file_list%
)
DEL %temp_file_list%
) ELSE (
COPY %archive_file_list% %backup_file_list%
)
SET SAMEDRIVE=1
SET DRIVENAME=
FOR /F "delims=" %%i IN (%backup_file_list%) DO (
SET FILEDRIVENAME=%%i
SET FILEDRIVENAME=!FILEDRIVENAME:~0,3!
IF DEFINED DRIVENAME (
IF NOT !DRIVENAME!==!FILEDRIVENAME! SET SAMEDRIVE=0
) ELSE (
SET DRIVENAME=!FILEDRIVENAME!
)
)
IF NOT %SAMEDRIVE%==1 (
ECHO 为保持文件夹结 构,所有待备份文件请放在相同的驱动器中
PAUSE
GOTO :EOF
)
ECHO 经检测,所有待备份文 件位于相同的 驱动器 %DRIVENAME% 中
FOR /F "delims=" %%i IN (%backup_file_list%) DO (
SETLOCAL DISABLEDELAYEDEXPANSION
SET FILEPATH=%%i
SETLOCAL ENABLEDELAYEDEXPANSION
SET FILEPATH=!FILEPATH:~3!
ECHO !FILEPATH!>>%zip_file_list%
ENDLOCAL
ENDLOCAL
)
ECHO 已创建基于驱动器 %DRIVENAME% 的待备份文件相对位置列表
ECHO 下面开始备份
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
CD /D %DRIVENAME%
7z.exe a "%target_file%" @"%zip_file_list%" -mx9 -ms=4g -mmt -scsWIN
IF NOT %method%=="difference" (
ECHO 下面清除备份文 件 的Archive标记
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
ECHO 开始清除已备份文 件的Archive标记
SETLOCAL DISABLEDELAYEDEXPANSION
FOR /F "delims=" %%i IN (%backup_file_list%) DO (
ECHO 清 除已备份文件 %%i 的 Archive标记
ATTRIB -A "%%i"
)
ENDLOCAL
)
ECHO 清除所有备份文件的 Archive 标记
ECHO 下面删除临时文件
CALL :PROMPT_YES
IF %PROMPT_RESULT%==no GOTO :EOF
DEL %archive_file_list%
DEL %backup_file_list%
DEL %zip_file_list%
RMDIR %TEMP_PATH%
ECHO 已删除临时文件
pause
GOTO :EOF
:PROMPT_YES
IF NOT "%prompt_yes%"=="yes" (
SET /P confirm="您确认上述信息吗(Y/N)?"
IF /I "!confirm:~0,1!" EQU "y" (
SET PROMPT_RESULT=yes
) ELSE (
SET PROMPT_RESULT=no
)
)
GOTO :EOF
temp.bat
@ECHO OFF
SET TEMP_BASE=%CD%\temp
IF NOT EXIST %TEMP_BASE% (
MKDIR %TEMP_BASE%
ECHO 创建临时文件夹: %TEMP_BASE%
) ELSE (
ECHO 已存在临时文件 夹: %TEMP_BASE%
)
SET TEN_HOUR=%TIME:~0,1%
IF "%TEN_HOUR%"==" " (
SET TEN_HOUR=0
)
SET TEMP_PATH=%TEMP_BASE%\%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%-%TEN_HOUR%%TIME:~1,1%-%TIME:~3,2%-%TIME:~6,2%
MKDIR %TEMP_PATH%
ECHO 创建临时文件夹: %TEMP_PATH%
exit /b 0
process.check.bat
@ECHO OFF
:BEFORECHECK
SET CHECKRESULT=1
FOR /F "tokens=1,2" %%i IN (%1) DO (
TASKLIST /FI "IMAGENAME eq %%i" | FIND /I "%%i"
IF NOT ERRORLEVEL 1 (
SET CHECKRESULT=0
ECHO %%j
PAUSE
) ELSE (
ECHO 没 有发现进程 %%i
)
)
IF NOT %CHECKRESULT%==1 GOTO BEFORECHECK
转载于:https://blog.51cto.com/huzhenghui/296832
Windows 7 - 使用批处理脚本模拟Windows XP中的msbackup备份程序相关推荐
- Windows下bat批处理脚本常用场景整理,持续更新中。。。
Windows下bat批处理脚本常用场景整理,持续更新中... 一.Winodws下使用bat脚本对结果进行筛选 例如:在筛选出来的结果中,筛选是否有"$G"字段 adb shel ...
- Windows系统bat批处理脚本实现暂停时间延迟方法
描述:Windows系统bat批处理脚本实现暂停时间延迟方法 代码: @ping 127.0.0.1 -n 1 >nul
- 使用新版 Windows Terminal 打开批处理脚本的方法
除了配置有点麻烦,其它都超级好的Terminal Windows 终端是一个面向命令行工具和 shell(如命令提示符.PowerShell 和适用于 Linux 的 Windows 子系统 (WSL ...
- 提升BT下载速度,Windows 做种批处理脚本(.bat)启动方案
BT下载,下载速度来源于其它人做种上传的速度,做种的人越多,下载速度越快,按照BT的算法, 理论上, 同等条件下,「做种的人」要比「不做种的人」获得更快的下载速度,做种速度快的人,要比做种慢的人获得更 ...
- 转】windows下使用批处理脚本实现多个版本的JDK切换
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开 ...
- Windows 下的批处理脚本基础——网络相关命令(用户操作命令、用户组操作命令)
自从优盘中毒,就开始发现学习批处理脚本的重要性.一起加油冲冲冲!!! 干正事!!! 目录 用户操作命令 查看用户帮助信息 查看用户详细帮助信息 查看用户详细信息 查看用户账户 删除用户 创建用户 用户 ...
- Windows 下的批处理脚本基础——批处理运算操作(代码可拿)
自从优盘中毒,就开始发现学习批处理脚本的重要性.一起加油冲冲冲!!! https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩 ...
- Windows Batch bat批处理脚本 停止和启动IIS服务,可用于自动重启方案
一.直接上代码 ::关闭输出 @echo off ::获取当前时间 set Time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%t ...
- Windows 下的批处理脚本基础——炫酷命令提示符窗口(让窗口变成你喜欢的样子)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请 ...
- C#【必备技能篇】使用批处理脚本(.bat文件)打开控制台应用程序
背景: 有时,需要使用.bat文件来运行一个.exe程序(一般是控制台应用程序),可以点击bat文件运行C#写的控制台应用程序. 示例: [1]Test.exe程序 和 click.bat文件 放在一 ...
最新文章
- php如何抓取网页内容,php如何抓取网页数据?
- 云计算如何使企业的业务受益?
- Mac隔空投送功能在哪? macbook隔空投送更方便的使用方法
- vue-cli 引用elementUI打包后文件过大
- 字节流读数据 一次读一个字节
- IDEA汉化包插件无法下载解决办法
- 计算机的超级登录用户名和密码,登录到windows用户名和密码
- 打印机显示rpc服务器,win10打印机出现RPC服务器不可用的处理办法
- oracle自学OCA,上海学习oracle OCA
- 用知识图谱打开梁山好汉一百单八将
- java坦克大战(1.0)
- Geogebra拓扑学家的正弦曲线
- php怎么读取word文档
- 使用 Istio 实现基于 Kubernetes 的微服务应用
- 【来日复制粘贴】使用公式提取数据
- python语言编写的DLL注入工具
- 音乐播放器Android开发的目的,基于Android的手机音乐播放器的设计与开发
- kaist数据集国内下载百度云下载链接
- java生成pdf(pd4ml+freemarker生成带图片和中文的pdf)
- Zookeeper单例搭建与伪集群搭建
热门文章
- python 绘图sns.distplot
- 记录uluuuuuuu
- PHP实现完全二叉树
- 未来的计算机想象,关于未来电脑的想象作文
- php基础教程 第五章,php基础教程——5数据库总结_PHP教程
- MAC安装apache tomcat配置方法图文教程
- 打造狂拽炫酷的主流自定义侧滑控件(仿酷狗和QQ5.0)
- APP中一种在Java层实现的简单守护进程方式
- html5 embed 不自动播放,html5自动播放与 iframe 你管videoautoplay=1不工作?_html5_开发99编程知识库...
- html打开本地excel文件夹,html使用excel表格数据库-html读取本地excel文件并展示