`
baiguomeng
  • 浏览: 958308 次
文章分类
社区版块
存档分类
最新评论

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= 4 g -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

分享到:
评论

相关推荐

    Python库 | msbackup-1.9.3-py3-none-any.whl

    python库,解压后可用。 资源全名:msbackup-1.9.3-py3-none-any.whl

    PyPI 官网下载 | msbackup-1.9.3-py3-none-any.whl

    资源来自pypi官网。 资源全名:msbackup-1.9.3-py3-none-any.whl

    Python库 | msbackup-1.9.6.tar.gz

    python库。 资源全名:msbackup-1.9.6.tar.gz

    MS-DOS 7.10 完整安装版

    正因为MS-DOS 7.x的功能非常强大,微软公司推出的Windows 9x等GUI程序就是用了一个经过某些修改的精简/特别版的MS-DOS 7.x内核来启动的。而以上的MS-DOS 7.10完整安装版和Windows 9x所带的精简版的DOS相比之下功能...

    mosdos7.1f.rar

    正因为MS-DOS 7.x的功能非常强大,微软公司推出的Windows 9x等GUI程序就是用了一个经过某些修改的精简/特别版的MS-DOS 7.x内核来启动的。而以上的MS-DOS 7.10完整安装版和Windows 9x所带的精简版的DOS相比之下功能...

    MS-DOS 6.22

    1993年,MS-DOS 6.x 增加了很多GUI程序,如Scandisk、Defrag、Msbackup等,增加了磁盘压缩功能,增强了对Windows 的支持

    MS-DOS 6.22中文版

    1993年,MS-DOS 6.x 增加了很多GUI程序,如Scandisk、Defrag、Msbackup等,增加了磁盘压缩功能,增强了对Windows 的支持。

    MS-DOS编辑器

    对于磁盘,开始加入磁区整理软件 DEFRAG以及磁盘快取程式 SMARTDRV。档案管理方面,以豪华的 MSBACKUP 取代了阳春的 BACKUP,另外,终于加入了 DELTREE 与 MOVE 公用程式

    dos6.22帮助手册

    MS-DOS HELP 命令参考 ANSI.SYS EMM386.EXE Multi-config Append Erase Nlsfunc Attrib Exit Numlock Batch commands Expand Path ...Edit Msbackup Vol EGA.SYS Mscdex VSafe Emm386 Msd Xcopy

Global site tag (gtag.js) - Google Analytics