下面是网上找到的ghostxp 封装的批处理命令,很多初学者不知道其含义,现参照有关资料,解释一下其运行机理,不对的地方请代为指正。
==>AUTOEXEC.BAT
@ECHO OFF
LH MSCDEX.EXE /D:mscd000>nul
findcd /s>nul
call findcdr "ghost.exe" C D E F G H I J K L M N O P Q R S T U V W X Y Z
%CDROM%:
ghost -clone,mode=pload,src=winxpsp2.gho:1,dst=1:1 -crcignore -sure -rb
==>findcdr.BAT
@echo off
set file=%1
:FCDR
if "%CDROM1%"=="%2:" goto SCDR
shift
goto FCDR
:SCDR
cda %2:>nul
IF errorlevel 1 goto next
if not exist %2:/%FILE% goto next
set cdrom=%2
goto end
:next
if "%2"=="Z" goto end
shift
goto SCDR
:end
------------------------------------------
要点,先熟悉一下几个命令,是了解上面批处理命令的关键
findcd /s 显示和设置所有光驱的驱动盘符 /2 显示和设置第二光驱的驱动盘符 FINDCD 2就可以将第2个光驱的盘符分配为%CDROM%;FINDCD 3就可以分配第3个盘符,以此类推;
若执行FINDCD /S,就一次性分配所有光盘盘符,分别为%CDROM1%、%CDROM2%,等等,而此时%CDROM%则为光盘总数目。 CDA 用来判断光驱中是否有光盘 SHIFT 内部命令、批处理文件命令1.功能: 使得DOS命令行上可以使用超过10个(%0到%9)以上的可替代参数。 2.格式SHIFT 3.说明 1.可替代参数的编号是%0--%9,如果要在一个命令行使用超过10个可以被代换的参数,则您可使用SHIFT命令来突破此限制。 2.每当执行SHIFT一次,所有命令行上的所有参数将向左移动一位。 %1的内容将为%2的内容所取代...,%9内容则由新的参数递补。 3.%0表示批处理文件本身的名称,永远不变,所以每次执行时您可以加上 9个参数在批处理文件名后。若要增加一个参数,则您将需要使用这个SHIFT命令来移位,才可取得第十个参数。 4.范例 1.SHIFT.BAT文件,内容如下: @ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 SHIFT @ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 SHIFT @ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 2.执行结果如下: A:/>SHIFT 1 1 2 3 4 5 6 7 8 9 10 11(先后跟随11个参数) 1 2 3 4 5 6 7 8 9 (取最前面9个参数) A:/>SHIFT (移位) 2 3 4 5 6 7 8 9 10 (取另外9个参数) A:/>SHIFT (移动) 3 4 5 6 7 8 9 10 11 (取另外9个参数) --------------------------------------------- 下面给出注释 ==>AUTOEXEC.BAT @ECHO OFF REM 关闭回显 LH MSCDEX.EXE /D:mscd000>nul REM 装载光驱 findcd /s>nul REM 设置光驱盘符,加上/s开关,如是双光驱,第一光驱的盘符变量存在%cdrom1%中 ,第二光驱的盘符变量存在%cdrom2% call findcdr "ghost.exe" C D E F G H I J K L M N O P Q R S T U V W X Y Z REM 执行下面的findcdr.bat批处理命令,此行findcdr后都为传递的参数 %CDROM%: REM 切换到光驱盘符 ghost -clone,mode=pload,src=winxpsp2.gho:1,dst=1:1 -crcignore -sure -rb REM 执行ghost,恢复xp到第一分区 ==>findcdr.BAT @echo off set file=%1 REM 设置变量file为第一参数ghost.exe :FCDR if "%CDROM1%"=="%2:" goto SCDR REM findcd分配的盘符与参数2比较,如相同转到SCDR子句 shift goto FCDR :SCDR cda %2:>nul REM 判断光驱内是否有光盘 IF errorlevel 1 goto next REM 如无光盘,转到next子句 if not exist %2:/%FILE% goto next REM 如不存在ghost.exe,转到next子句 set cdrom=%2 REM设置cdrom变量 goto end :next if "%2"=="Z" goto end shift goto SCDR :end |
下面假定存在双光驱,走一下findcdr.bat流程,使用findcd语句后,生成两个光驱盘符,一个是E,一个是F,F盘内放有xp光盘
1、第一遍走到if "%CDROM1%"=="%2:" goto SCDR 时,%CDROM1%存储的是E:,"%2:" 存储的是C:,不相同,走下一语句shift,又回到判断盘符的语句,这次"%2:" 存的是D:,不相同,再走一遍,这次"%2:" 存储的是E:,相同,走SCDR语句。
2、判断光驱内是否有光盘,现在E盘内无光盘,走到next语句。
3、判断%2存储是不是Z,现在不是,走下面的shift,%2变为F,回到SCDR语句。
4、判断F盘内是否放有xp光盘,现在条件为真,走到判断F盘下是否存在ghost.exe语句。光盘下如存在ghost.exe,则设定cdrom变量为F:,结束此批处理。
5、回到autoexec.bat,切换到F:,执行ghost.exe,恢复xp到第一分区,完成