找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20906|回复: 0

[文本处理] BAT+RAR实现备份的批处理代码

[复制链接]
发表于 2011-8-21 20:54:43 | 显示全部楼层 |阅读模式
本帖最后由 zhangop9 于 2011-8-21 21:45 编辑

http://bbs.bathome.net/thread-2498-1-1.html
BAT+RAR实现备份的批处理代码

这个能用,可是一个是我用的是完整路径,还有就想有个还原的功能,能不能改一下,还原到原位置
  1. @ECHO OFF



  2. Title 备份@BAT by Bo QQ:104630166

  3. ::Ver 2008-11-16



  4. COLOR 1F



  5. ::SETLOCAL ENABLEDELAYEDEXPANSION

  6. ::SETLOCAL DISABLEDELAYEDEXPANSION







  7. Rem =========================参数整理===================

  8. ::帮助

  9. IF "%*" EQU "/?" CALL :BRHelp && SHIFT /1

  10. ::传递进来的参数进行整理

  11. IF /I "%*" EQU "SET" CALL :BRSet    %预留给计划或定时备份时使用,未完成%

  12. :Parameter

  13.       Rem ECHO -%1-

  14.   SET "Parameter=%1"

  15.       Rem ECHO -%Parameter%-

  16.   IF  NOT DEFINED Parameter GOTO EndParameter

  17.   %BMRem% IF /I "%Parameter:~0,3%" EQU "BM-" ( SET "BackupMode=%Parameter:~3%" && SET "BMRem=Rem" ) && GOTO IFParameter

  18.   %BLRem% IF /I "%Parameter:~0,3%" EQU "BL-" ( SET "BackupList=%Parameter:~3%" && SET "BLRem=Rem" ) && GOTO IFParameter

  19.   %BORem% IF /I "%Parameter:~0,3%" EQU "BO-" ( SET "BackupOutput=%Parameter:~3%" && SET "BORem=Rem" ) && GOTO IFParameter

  20.   %RarVRem% IF /I "%Parameter:~0,5%" EQU "RarV-" ( SET "RarV=%Parameter:~5%" && SET "RarVRem=Rem" ) && GOTO IFParameter

  21.   %RarKRem% IF /I "%Parameter:~0,5%" EQU "RarK-" ( SET "RarK=%Parameter:~5%" && SET "RarKRem=Rem" ) && GOTO IFParameter

  22.   %RarRIRem% IF /I "%Parameter:~0,6%" EQU "RarRI-" ( SET "RarRI=%Parameter:~6%" && SET "RarRIRem=Rem" ) && GOTO IFParameter

  23.   %RarRVRem% IF /I "%Parameter:~0,6%" EQU "RarRV-" ( SET "RarRV=%Parameter:~6%" && SET "RarRVRem=Rem" ) && GOTO IFParameter

  24.   %PRRem% IF /I "%Parameter:~0,3%" EQU "PR-"  ( SET "PathRar=%Parameter:~3%" && SET "PRRem=Rem" ) && GOTO IFParameter

  25.   ECHO. && ECHO. && ECHO %Parameter% && CALL :ERROR && EXIT /B

  26. :IFParameter

  27. SHIFT /1

  28.   SET "Parameter="

  29. GOTO Parameter

  30. :EndParameter

  31. ::测试时显显示各参数的值

  32. IF 1 LSS 0 (

  33.   ECHO 1.备份方式“%BackupMode%”

  34.   ECHO 2.备份清单路径“%BackupList%”

  35.   ECHO 3.输出“%BackupOutput%”

  36.   ECHO 4.分卷“%RarV%”

  37.   ECHO 5.锁定“%RarK%”

  38.   ECHO 6.优先级“%RarRI%”

  39.   ECHO 7.恢复卷“%RarRV%”

  40.   ECHO 8.RAR.exe路径“PathRar”

  41. PAUSE

  42. )





  43. Rem =========================准备工作===================

  44. ::获取桌面的路径

  45. IF NOT DEFINED Desktop (

  46.   ECHO WSCRIPT.ECHO CREATEOBJECT^("WSCRIPT.SHELL"^).REGREAD^("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop"^)>"%TEMP%\Tmp.vbs"

  47.   FOR /F "DELIMS=" %%I IN ('CSCRIPT //NOLOGO "%TEMP%\Tmp.vbs"') DO ( CALL SET "Desktop=%%~I" )

  48.   ERASE /F /Q /S "%TEMP%\Tmp~.vbs" 2>NUL 1>NUL

  49. )

  50. SET "DateTime=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2%"





  51. Rem =========================WinRar,变量PR===================

  52. ECHO.

  53. IF DEFINED PathRar GOTO ChPathRar

  54. :PathRar

  55. ::获取RAR.exe的路径

  56. ::REG QUERY "HKCR\WinRAR\DefaultIcon" /VE /F DATA /D 2>NUL 1>NUL || GOTO ChPathRar

  57. ::REG QUERY "HKCR\WinRAR\DefaultIcon" /VE 2>NUL 1>NUL || GOTO ChPathRar

  58. ECHO WSCRIPT.ECHO CREATEOBJECT("WSCRIPT.SHELL").REGREAD("HKCR\WinRAR\DefaultIcon")>"%TEMP%\Tmp.vbs"

  59. FOR /F "DELIMS=" %%I IN ('CSCRIPT //NOLOGO "%TEMP%\Tmp.vbs"') DO ( CALL SET "PathRar=%%~dpI" )

  60. ERASE /F /Q /S "%TEMP%\Tmp~.vbs" 2>NUL 1>NUL

  61.     Rem ECHO [%PathRar%] && PAUSE

  62. :ChPathRar

  63. IF %PathRar:~-1% EQU ^\ (

  64.   SET "PathRar=%PathRar:~0,-1%"

  65. )

  66. SETLOCAL ENABLEDELAYEDEXPANSION

  67. IF NOT EXIST "%PathRar%\RAR.EXE" (

  68.   IF EXIST "%ProgramFiles%\WinRAR\RAR.exe" ( CALL SET "PathRar=%ProgramFiles%\WinRAR\RAR.EXE"  ) && GOTO EndPathRar

  69.   IF /I "%TempPathRar%" EQU "Error" (

  70.     ECHO. && ECHO. && ECHO ErrorLelel-PR && CALL :ERROR

  71.   )

  72.   ECHO.

  73.   ECHO  系统未安装 WinRAR 软件,

  74.   ECHO   或找不到 RAR.exe 文件,

  75.   ECHO   请先安装 WinRAR 软件或

  76.   ECHO   输入 RAR.exe 所在路径,

  77.   ECHO  [回车] 退出

  78.   ECHO.

  79.   SET "PathRar="

  80.   SET /P PathRar=

  81.       Rem SET "PathRar=!PathRar:^%=^!!"

  82.   IF "!PathRar!" EQU "" ( EXIT /B )

  83.       Rem ECHO TEST && ECHO !PATHRAR! && pause

  84.   SET "TempPathRar=Error"

  85. ) && GOTO ChPathRar

  86. SETLOCAL DISABLEDELAYEDEXPANSION

  87. SET "PathRar=%PathRar%\RAR.EXE"

  88. :EndPathRar

  89. FOR /F "Skip=1 TOKENS=2" %%I IN ('"%PathRar%"/?') DO (

  90.   SET "RarVer=%%I"

  91.   GOTO CVRar

  92. )

  93. :CVRar

  94. IF "%RarVer%" LSS "3" (

  95.   ECHO.

  96.   ECHO RAR 版本不支持,程序即将退出!

  97.   ECHO.

  98.   PAUSE

  99.   EXIT /B

  100. )





  101. Rem =========================备份方式,变量BM===================

  102. ECHO.

  103. IF DEFINED BM GOTO CHBackupMode

  104. ::备份方式的选择

  105. :BackupMode

  106. ECHO.

  107. ECHO 请选择备份方式:

  108. ECHO  完整备份

  109. ECHO [D] 差异备份

  110. ECHO  增量备份

  111. ECHO [H] 帮助

  112. ECHO.

  113. SET "BackupMode="

  114. SET /P BackupMode=请选择: 

  115. :ChBackupMode

  116. IF /I "%BackupMode%" EQU "B" ( SET "DirA=A" ) && ( SET "RarAc=-AC" ) && GOTO EndBackupMode

  117. IF /I "%BackupMode%" EQU "D" ( SET "DirA=A:A" ) && ( SET "RarAc=" ) && GOTO EndBackupMode

  118. IF /I "%BackupMode%" EQU "I" ( SET "DirA=A:A" ) && ( SET "RarAc=-AC" ) && GOTO EndBackupMode

  119. IF /I "%BackupMode%" EQU "H" (

  120.   ECHO.

  121.   ECHO.

  122.   ECHO.

  123.   ECHO 完整备份:备份用户指定的全部文档,并标记

  124.   ECHO      为“已备份”;

  125.   ECHO 差异备份:备份用户指定文档中的“已更改”

  126.   ECHO      或新建文档,不改变备件标记;

  127.   ECHO 增量备份:备份用户指定文档中的“已更改”

  128.   ECHO      或新建文档,并标记为“已备份”

  129. ) && GOTO BackupMode

  130. ECHO. && ECHO. && ECHO ErrorLelel-BM && CALL :ERROR && GOTO BackupMode

  131. :EndBackupMode





  132. Rem =========================备份清单,变量BL===================

  133. ECHO.

  134. ::Vista下不支持CMD窗口获取拖进来的文件路径

  135. ::备份清单

  136. :BackupList

  137. IF DEFINED BL GOTO ChBackupList

  138.   IF NOT EXIST "%Desktop%\BackupList.txt" (

  139.         ECHO ;备件清单:>"%Desktop%\BackupList.txt"

  140.         ECHO ;请在下面填入将要备份的文件(夹)的路径>>"%Desktop%\BackupList.txt"

  141.         ECHO ;多行输入。>>"%Desktop%\BackupList.txt"

  142.         ECHO ;保存并退出,程序即可继续执行。>>"%Desktop%\BackupList.txt"

  143.         ECHO ;↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓>>"%Desktop%\BackupList.txt"

  144.     ECHO.>>"%Desktop%\BackupList.txt"

  145.     ECHO.

  146.     ECHO 请在桌面的 BackupList.txt 文件中

  147.     ECHO 填入将要备份的文件(夹)的路径,

  148.     ECHO 多行输入。

  149.         NOTEPAD "%Desktop%\BackupList.txt"

  150.   ) ELSE (

  151.       ECHO.

  152.       ECHO 请确认桌面的 BackupList.txt 文件中是备份文件的路径。

  153.       ECHO 如果不是,请删除此文件。

  154.         )

  155.         SET "BackupList=%Desktop%\BackupList.txt"

  156. :ChBackupList

  157.   ECHO //备份日期:%DATE%>>"%Temp%\RarFiles%DateTime%.lst

  158.   ECHO //备份时间:%TIME%>>"%Temp%\RarFiles%DateTime%.lst

  159.   ECHO.>>"%Temp%\RarFiles%DateTime%.lst

  160. FOR /F "EOL=;" %%I IN ( %BackupList% ) DO (

  161.       Rem ECHO %%I && PAUSE

  162.   DIR "%%~I" /%DirA% /B /S 2>NUL >>"%Temp%\RarFiles%DateTime%.lst"

  163. )

  164. :EndBackupList





  165. Rem =========================输出路径,变量BO===================

  166. ECHO.

  167. ::未涉及网络路径

  168. ::输出的路径

  169. IF DEFINED BO GOTO ChBackupOutput

  170. :BackupOutput

  171. ECHO.

  172. ECHO 备份文件将以此时的的日期和时间命名

  173.     Rem ECHO %DateTime%

  174. ECHO.

  175. ECHO 请输入备份文件“Backup%DateTime%.RAR”的保存路径:

  176. ECHO.

  177. SET "BackupOutput="

  178. SET /P BackupOutput=

  179. :ChBackupOutput

  180. IF "%BackupOutput:~-1%" EQU "^" SET "BackupOutput=%BackupOutput:~0,-1%"

  181. ::PUSHD %~DP0

  182. CD /D "%BackupOutput%" 2>NUL || MD %BackupOutput% 2>NUL || ( ECHO. && ECHO. && ECHO ErrorLelel-BO && CALL :ERROR && GOTO BackupOutput )

  183. ::POPD

  184. SET "BackupOutput=%BackupOutput%\Backup%DateTime%.RAR"

  185. :EndBackupOutput





  186. Rem =========================压缩===================

  187. ECHO.

  188. IF NOT DEFINED RarV SET "RarV=102400^*1024"    %设置分卷压缩时分卷的大小,102400×1024等于100M%

  189. IF NOT DEFINED RarK SET "RarK=-K"    %设置压缩文件是否被锁定%

  190. IF NOT DEFINED RarRI SET "RarRI=RI1:1"    %设置压缩时的优先级和休眠时间%

  191. IF NOT DEFINED RarRV SET "RarRV=5"    %设置恢复卷比例%

  192. "%PathRar%" A %RarAc% -AV- -EP3 -ISND %RarK% -M5 -%RarRI% -RR5P -RV%RarRV%P -T -V%RarV%  -W%Temp% -z"%Temp%\RarFiles%DateTime%.lst" "%BackupOutput%" @"%Temp%\RarFiles%DateTime%.lst"

  193. ::   RAR    A   -AC    -AV- -EP3 -ISND   -K    -M5  -RI5:5  -RR5P  -RV10P -T -V1048576 -W%Temp% -z"%Temp%\RarFiles%DateTime%.lst" "%Desktop%\Backup%DateTime%.rar" @"%Temp%\RarFiles%DateTime%.lst"

  194. IF ERRORLEVEL 2 ( SET "MSGBOXVBS=未知错误") && GOTO MSGBOXVBS

  195. IF ERRORLEVEL 1 ( SET "MSGBOXVBS=没有需要备份的文件" ) && GOTO MSGBOXVBS

  196. SET "MSGBOXVBS=备份数据已经完成"

  197. :MSGBOXVBS

  198. @ECHO MSGBOX "   %MSGBOXVBS%   ", ,"by Bo QQ:104630166" >%Temp%\MSG.VBS

  199. @"%Temp%\MSG.VBS"

  200. ERASE /F /S /Q /A "%Temp%\RarFiles%DateTime%.lst" 1>NUL

  201. ERASE /F /Q /S %Temp%\MSG.VBS 2>NUL 1>NUL

  202. EXIT /B





  203. Rem =========================报错===================

  204. :ERROR

  205. ECHO. && ECHO.

  206. COLOR 0C

  207. ECHO 错误,请重新输入:

  208. ECHO.

  209. PAUSE

  210. ECHO.

  211. COLOR 1F

  212. EXIT /B





  213. Rem =========================帮助===================

  214. :BRHelp

  215. ECHO.

  216. ECHO BM-[B^|D^|I]  备份方式(完整、差异、增量),例:BM-B

  217. ECHO.

  218. ECHO BL-[drive:[path[filename]]]

  219. ECHO         写有备份清单文件的完全路径及文件名,例:BL-"D:\backuprar.txt"

  220. ECHO.

  221. ECHO BO-[drive:[path]]

  222. ECHO         输出完整路径,不含文件名,例:BO-"D:\backup"

  223. ECHO.

  224. ECHO RarV-V^<大小^> 设置分卷压缩时分卷的大小,单位:M,例:RarV-V1048576

  225. ECHO.

  226. ECHO RarK-[K^|U]   设置压缩文件是否被锁定,例:RarK-U

  227. ECHO.

  228. ECHO RarRI-RI^<P^>[:^<S^>]

  229. ECHO         设置压缩时的优先级和休眠时间,例:RarRI-RI5:5

  230. ECHO         优先级0默认,1-最小,15-最大

  231. ECHO         休眠时间以毫秒为单位

  232. ECHO.

  233. ECHO RarRV-RV[N]P  设置恢复卷比例,百分比,例:RarRV-RV10P

  234. ECHO.

  235. ECHO PR-[drive:[path]] 文件 rxr.exe 路径

  236. ECHO.

  237. PAUSE

  238. EXIT /B



  239. Rem =========================计划任务===================

  240. :BRSet
复制代码

评分

参与人数 1PB -2 收起 理由
Batcher -2 请编辑自己的帖子,把代码放到code标签里面 ...

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 21:27 , Processed in 0.020260 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表