| 
 | 
4#
 
 
 楼主 |
发表于 2011-9-30 08:10:46
|
只看该作者
 
 
 
CHECK.BAT内容: 
!BAT 
debug 0 
::参数设置 
set path=%~p0 
set t=50 
::设定延时,单位是秒 
set p1=x:y 
::强行设定备份恢复对象,GHOST格式(示例:1:1为第一硬盘第一分区),此处不修改自动判断备份恢复对象。 
set p2=/C_BAK.GHO 
::设定GRUB4DOS格式的备份文件位置及名称,如果放置于子目录,必须事先创建。 
set p3= 
::设定OMNIFS格式的硬盘读写参数,如果无法备份或备份速度极慢,参数设定为p3=/noide再试。 
set p4=(hdx,y) 
::设定备份文件放置的分区,示例:(hd0,4)为第一硬盘第一逻辑分区,此处不修改,放置于第一硬盘最后逻辑分区(硬盘无逻辑分区为最后主分区)。 
set BACKUP=-z1 -sure -rb 
::设定备份参数 
set RESTORE=:1 -fx -sure -rb 
::设定恢复参数 
::::::::::::::::::::::::::::::::::::::::::::::: 
font %~dp0unifont.hex 
graphicsmode -1 640 
::菜单背景图 
::splashimage %~dp0TEST.BMP 
insmod %~dp0diskid 
if %p4%==(hdx,y) set p4=endpart 
set cdd="" 
checkrange 20111129:-1 read 0x8278 || echo -P:1212 $[0106]请使用 grub4dos-0.4.5b-2011-11-29 或更新版本! && echo -P:1418 $[0105]按任意键重启。 && pause && reboot 
::检测启动介质类型 
root (ud) && goto :ud 
checkrange 0x0 read 0x8280 && map (fd0) (fd1) && map --hook && goto :checkos 
checkrange 0x80 read 0x8280 && goto :hdcheck 
goto :cd 
::所有其他启动盘、光盘启动、pxe启动作为光盘启动处理 
::echo -P:1218 $[0105]未知的启动盘类型! && echo -P:1418 $[0105]按任意键重启。 && pause && reboot 
exit 
:ud 
calc *0x82b8>>8&0xff-0x80 || goto :hdcheck 
calc *0x82b8>>8&0xff-0x80 && map (fd0)+1 (hd) && map --hook && goto :checkos 
exit 
:cd 
set cdd=off 
goto :checkos 
exit 
:hdcheck 
root (hd0,1) && goto :checkos 
root (hd0,4) && goto :checkos 
uuid (hd0,0) 
if %?_UUID%==0000-0000 goto :usbhdd 
goto :checkos 
exit 
::硬盘次序轮换,将U盘置于最后 
:usbhdd 
clear 
set /a hd=*0x475&0xff+0x7e 
if %hd%==127 echo -P:1218 $[0105]除U盘启动盘外无其他硬盘, 按任意键重启! && pause && reboot 
:move 
set /a hd1=%hd%+1 
map (%hd1%) (%hd%) 
set /a hd=%hd%-1 
if not %hd%==127 goto :move 
set /a hd=%hd%+1 
map (%hd%) (hd-1) 
map --hook 
goto :checkos 
exit 
:checkos 
rootnoverify (hd0,0) 
find --set-root makeactive --status 
if exist ()/windows/system32/version.dll goto :ms 
if exist ()/winnt/system32/version.dll goto :ms 
goto :noms 
exit 
::检测硬盘激活分区系统类型 
:ms 
map --mem ()/windows/system32/version.dll (rd) || map --mem ()/winnt/system32/version.dll (rd) 
calc *0x82d0=*0x82d0+*0x82d8-0x800 
calc *0x82d8=0x800 
cat --locate=\0\0\x44\0\0\0 --number=1 (rd)+1 | set skip= 
set /a skip=0x%skip%-0x30 
cat --locate=\0\0\0 --skip=%skip% --number=1 (rd)+1 | set skip= 
calc *0x82d0=*0x82d0+0x%skip%+3 
call Fn.67 *0x82d0 0x60000 3 
cat (md)0x300+1,1 | set nt_ver=NT 
cat (md)0x300+1,3 | goto :_ 
:noms 
set sys_ver=未知系统 
goto :disp 
exit 
:_5.0 
set sys_ver=Windows 2000 
goto :disp 
exit 
:_5.1 
set sys_ver=Windows XP 
goto :disp 
exit 
:_5.2 
set sys_ver=Windows 2003 
goto :disp 
exit 
:_6.1 
set sys_ver=Windows 7/2008 
goto :disp 
exit 
:_6.2 
set sys_ver=Windows 8 
goto :disp 
exit 
:disp 
set sys_hd=%@root% 
clear 
diskid 
cat --skip=0x4ff00 (md)+0x300 | set p5= 
if %p1%==x:y set p1=%p5% 
::自动设定备份恢复对象 
set ps=cmd="echo %1" filpre="" ext=.gho dirext=1 subdir=2 devs="--devices=h" return="reboot" p1=%p1% 
::设定搜索批处理运行参数 
rootnoverify (hd0,0) 
root %p4% || echo -P:1212 $[0106]目标磁盘不存在, 请更改参数 P4! && echo -P:1418 $[0105]按任意键重启。 && pause && reboot 
diskid 
cat --skip=0x4ff00 (md)+0x300 | set diskid= 
if %diskid%==%p1% && echo -P:1212 $[0104]错误: $[0106]备份文件不能放置于要备份或恢复的分区,请修改P4参数。 && echo -P:1418 $[0105] 按任意键重启。 && pause && reboot 
set pg=%@root% 
ls %p2% && cat --length=0 %p2% ||  set gho=1 
ls %p2% && cat --length=0 %p2% &&  set gho=2 
ls %p2% || set gho=0 
::判断备份文件是否为0字节(备份过程断电或强行中断造成),0为无备份文件, 1为存在0字节备份文件, 2为存在正常的备份文件。 
diskid 
echo %?% | set diskid= 
clear 
echo 
echo -P:1115 $[0102]系统位置: $[0106]%p5%  %sys_hd%  $[0102]系统类型: $[0106]%sys_ver% 
echo -P:1215 $[0102]备份恢复: $[0106]%p1%           $[0102]GHO 位置: $[0106]%pg%%%p2% 
if %gho%==1 echo -P:1422 $[0105]备份文件错误 $[0106]!!!$[0105] $[0105] 按 $[0106]Alt+B$[0105] 重新备份系统 
if %gho%==0 echo -P:1424 $[0105]系统备份不存在$[0106]!!!$[0105] 按 $[0106]Alt+B$[0105] 备份系统 
if %gho%==2 echo -P:1432 $[0105]恢复系统按 $[0106]F10 
echo -P:2225 $[0102]系统备份 恢复 维护    $[0103]%@DATE% 
echo -P:04-28 $[0101]Alt+B   $[0107]备份系统 
echo -P:05-28 $[0102]Alt+0   $[0107]0PE 维护 
echo -P:06-28 $[0103]Alt+D   $[0107]启动 DOS 
echo -P:07-28 $[0104]Alt+C   $[0107]G4D命令行 
echo -P:08-28 $[0105]Alt+S   $[0107]搜索.GHO 
root %sys_hd% 
set key= 
pause --test-key --wait=%t% 
set /A key=*0x4CB00 
if %key%==0x4400 goto 0x4400 
if %key%==0x3000 goto 0x3000 
if %key%==0x8100 goto 0x8100 
if %key%==0x2000 goto 0x2000 
if %key%==0x2E00 goto 0x2E00 
if %key%==0x1F00 goto 0x1F00 
:Default 
::引导硬盘默认系统 
clear 
root (hd0,0) 
find --set-root makeactive --status 
chainloader +1 
exit 
:0x4400    F10  
::恢复系统 
call :加载DOS映像 
clear 
if not exist %p2% reboot 
::如果系统备份不存在,重新启动 
write --offset=16 (fd0)/autoexec.bat %p1%\r\n 
write --offset=31 (fd0)/autoexec.bat %diskid%\r\n 
write --offset=46 (fd0)/autoexec.bat pload 
write --offset=59 (fd0)/autoexec.bat %p3%\r\n 
write --offset=167 (fd0)/autoexec.bat %p3%\r\n 
write --offset=275 (fd0)/autoexec.bat %p2%\r\n 
write --offset=383 (fd0)/autoexec.bat %RESTORE%\r\n 
cat --skip=275 --length=102 --locate=\/ --replace=\\ (fd0)/autoexec.bat 
cat --skip=167 --length=102 --locate=\/ --replace=\- (fd0)/autoexec.bat 
chainloader (fd0)/io.sys 
exit 
:0x3000    Alt+B  
::备份系统 
call :加载DOS映像 
clear 
if %gho%==2 password --md5 $1$om70$FkKbNfOBf72FrRSqrj34E1 
::系统备份已存在时,要求输入密码,当前密码为:123456 
write --offset=16 (fd0)/autoexec.bat %p1%\r\n 
write --offset=31 (fd0)/autoexec.bat %diskid%\r\n 
write --offset=46 (fd0)/autoexec.bat pdump 
write --offset=59 (fd0)/autoexec.bat %p3%\r\n 
write --offset=167 (fd0)/autoexec.bat %p3%\r\n 
write --offset=275 (fd0)/autoexec.bat %p2%\r\n 
write --offset=383 (fd0)/autoexec.bat %BACKUP%\r\n 
cat --skip=275 --length=102 --locate=\/ --replace=\\ (fd0)/autoexec.bat 
cat --skip=167 --length=102 --locate=\/ --replace=\- (fd0)/autoexec.bat 
chainloader (fd0)/io.sys 
exit 
:0x8100    Alt+0 
::引导0PE进行系统维护 
clear 
find --set-root /0PE/0PE.ISO 
map /0PE/0PE.ISO (0xFF) || map --mem /0PE/0PE.ISO (0xFF) 
map --hook 
chainloader (0xFF) 
exit 
:0x2000    Alt+D  
::进入DOS 
call :加载DOS映像 
clear 
write --offset=46 (fd0)/autoexec.bat todos 
chainloader (fd0)/io.sys 
exit 
:0x2E00    Alt+C 
::进入GRUB4DOS命令行 
clear 
commandline 
exit 
:0x1F00    Alt+S 
call :加载DOS映像 
clear 
write --offset=16 (fd0)/autoexec.bat %p1%\r\n 
write --offset=46 (fd0)/autoexec.bat pload 
write --offset=59 (fd0)/autoexec.bat %p3%\r\n 
write --offset=167 (fd0)/autoexec.bat %p3%\r\n 
write --offset=383 (fd0)/autoexec.bat %RESTORE%\r\n 
find --set-root %path%SEARTH.BAT 
%path%SEARTH.BAT %ps% 
exit 
:加载DOS映像 
find --set-root %path%ONEKEY.IMA 
map --mem %path%ONEKEY.IMA (fd0) 
map --hook 
::检查是否需要加载光驱的DOS驱动 
if %cdd%==off cat --skip=156 --length=30 --locate="devic" --replace="rem c" (fd0)/config.sys 
if %cdd%==off cat --skip=501 --length=25 --locate="LH sh" --replace="rem s" (fd0)/autoexec.bat 
clear 
echo  -P:1212 $[0105]5秒内选择是否加载USB的DOS驱动, 警告:加载驱动可能引起死机! 
echo  -P:1412 $[0105]按"空格"键加载USB的DOS驱动,其他键或无选择不加载驱动。 
set key= 
pause --test-key --wait=5 
set /A key=*0x4CB00 
if not %key%==0x3920 goto :nousb 
::加载DOS的U盘驱动 
cat --skip=94 --length=60 --locate="rem c" --replace="devic" (fd0)/config.sys 
:nousb 
exit 
 
[ 本帖最后由 mygamexxx 于 2011-12-6 11:09 编辑 ] |   
 
 
 
 |