ghostxp 批处理命令解析

ghostxp 批处理命令解析
2008-09-19 09:25

下面是网上找到的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到第一分区,完成

 

你可能感兴趣的:(file,存储,xp,dst,dos,c)