|  | 
 
| 本人为真实菜鸟,折腾了一个多礼拜,终于初步完成了这个简单的备份、还原小程序。不需要安装,直接拷贝到C盘根目录下即可(要能进入纯DOS),然后运行menu.bat,或autoexec.bat里面调用即可。 
 程序代码基本都是本站帖子里面借鉴来的,同时也得到了几位高手的指点和帮助,重点感谢dos时代菜鸟和pznpt两位高手,帮我解决了两个最头疼的难题,特别是时代菜鸟老大的获取备份目标盘分区的代码,是我这个程序的核心,在此感谢!
 
 发一下menu.bat的代码,忘各位高手指正:
 
 @echo off
 cls
 tw /q >nul
 tw /np >nul
 ::---------------------------------------------------
 set BF_DIR=SYSBACK
 set BF_NAME=OS_WINXP.GHO
 echo.
 wbat text 3,6 (+green on black)"正在分析硬盘分区数据,请等待...... !!!"
 echo.
 ::---------------------获取备份的目标盘分区(即:第一个非激活、非隐藏分区),赋值给 BF_PAR ---------------------------------------------
 omnifs info |awk '$0!~"Active" && $0!~"Hidden" && $0~"Volume"'|awk '{print $1;exit}'|nset BF_PAR=$1
 ::-------------以下部分为自动获取系统所在分区数据,SYS_HD 为系统硬盘,SYS_PAR 为系统分区号,SYSP 为合并后的系统分区编号(1:1)-----------------
 ::--omnifs info >hd_id.txt
 ::--awk -f sysdrv.awk  hd_id.txt|nset/p1,1 SYS_HD=$1
 ::--awk -f sysdrv.awk  hd_id.txt|nset/p3,1 SYS_PAR=$1
 ::--awk -f sysdrv.awk  hd_id.txt|nset SYSP=$1
 ::--------------------- set SYSP=1:1 只为显示使用,在本程序中没用
 
 ::-------------本程序中直接确定系统分区为1:1,所以不调用,直接赋值 SYS_HD=1、SYS_PAR=1。
 set SYS_HD=1
 set SYS_PAR=1
 
 omnifs dir %BF_PAR%\%BF_DIR%\ >hd_gho.txt
 awk '/%BF_NAME%/ {print $4}' hd_gho.txt|nset OMN_NAME=$1
 awk '/%BF_NAME%/ {print $1}' hd_gho.txt|nset OMN_TIME=$1
 ::------ 以下为转换日期显示格式 --------------------------------------------------------
 strings len=length %OMN_TIME%
 if "%len%"=="7" set OMN_TIME=0%OMN_TIME%
 strings yyyy=right %OMN_TIME%,2
 set yyyy=20%yyyy%
 strings mm=mid %OMN_TIME%,4,2
 strings dd=left %OMN_TIME%,2
 set OMN_TIME=%yyyy%年%mm%月%dd%日
 ::--------------------- 如果目标分区中找不到文件,文件名和日期变量会是空,后面判断时候就会出问题,因为不知道该怎么写,所以干脆在这里随便赋个值。
 if "%OMN_NAME%"=="" set OMN_NAME=kong
 :_sys_main
 cls
 call w.bat box @wbat.txt:main1
 if "%?%"=="100" goto _dos
 if "%?%"=="1" goto _restore
 if "%?%"=="2" goto _backup
 if "%?%"=="3" goto _dos
 if "%?%"=="4" goto _end
 :_backup
 if %BF_NAME%==%OMN_NAME% goto _bk_if
 cls
 wbat box  "系统首次备份,文件路径:%BF_PAR%\%BF_DIR%\%BF_NAME%!!",确认执行,取消备份 #1
 if errorlevel 100 goto _sys_main
 if errorlevel 2 goto _sys_main
 if errorlevel 1 goto _bf_start
 :_bf_start
 cls
 wbat text 3,6 (+green on black)"正在创建备份目录和文件属性处理中,请等待......!!!"
 omnifs mkdir %BF_PAR%\%BF_DIR%  >nul
 ::---感觉没必要设置隐藏,备份文件能看到更方便用户使用,隐藏有时候会误解。
 ::-- omnifs attrib +s +r +h %BF_PAR%\%BF_DIR% >nul
 ::-------------------------------------------------------------------------------------------------
 cls
 tw /q >nul
 ghost -clone,mode=pdump,src=%SYS_HD%:%SYS_PAR%,dst=%BF_PAR%\%BF_DIR%\%BF_NAME% -z5 -sure -rb
 :_bk_if
 cls
 wbat text 3,6 (+green on black)"--- 提示:备份文件保存路径为:%BF_PAR%\%BF_DIR%\%BF_NAME%,如有疑问请先检查 ---    "
 wbat box  "备份文件已存在(日期:%OMN_TIME%),继续操作将覆盖原备份文件!!",确认执行,取消备份 #1
 if errorlevel 100 goto _sys_main
 if errorlevel 2 goto _sys_main
 if errorlevel 1 goto _bf_start
 :_restore
 if not %BF_NAME%==%OMN_NAME% goto _re_if
 cls
 wbat text 3,6 (+green on black)"--- 注意:还原过程中切记不可断电、关机、强行终止,以免造成整个硬盘数据丢失!! ---    "
 wbat box  "确定用(日期:%OMN_TIME%)的备份还原系统吗!!",确认执行,取消还原 #1
 if errorlevel 100 goto _sys_main
 if errorlevel 2 goto _sys_main
 if errorlevel 1 goto _re_start
 :_re_start
 cls
 tw /q >nul
 ghost -clone,mode=pload,src=%BF_PAR%\%BF_DIR%\%BF_NAME%:1,dst=%SYS_HD%:%SYS_PAR% -sure -rb
 :_re_if
 cls
 wbat box  "系统备份文件不存在,请检查(文件路径:%BF_PAR%\%BF_DIR%\%BF_NAME%)!",取消返回 #1
 if errorlevel 100 goto _sys_main
 if errorlevel 1 goto _sys_main
 :_end
 rest
 :_dos
 cls
 echo       -----  进入MS-DOS v7.1,操作提示: -----
 echo.
 echo     NTDOS 加载 NTFS分区驱动;REST 重启系统;
 echo     TW/Q 退出中文系统;MENU 重新运行备份还原菜单
 echo.
 
 --------------------------------------------- 分割线 -----------------------------------------------
 补上程序包115网盘地址:http://115.com/file/anexdg9w
 
 [ 本帖最后由 lhc0688 于 2012-3-5 07:47 编辑 ]
 | 
 |