|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『楼 主』:
批处理文件!谁能看懂?
从GHOST.IMG中提取的两个批处理文件,制做自已的GHOST光盘,功能:一回从光盘回恢GHOST,二,运行中文分区DISKMAN,可是进入菜单后提示找不找A盘,原因是提取的两个批处理都加载了虚拟软盘A,所以无法正常运行,(我是BOOTEASY制做的)。现在想修改批处理文件,可是不知道从那里下手。修改后的功能是直接从光盘中菜单选择GHOST,或者DISKMAN。请批处理高手帮助!
提取文件一:AUTOEXEC。BAT如下。
ECHO OFF
LH MSCDEX.EXE /D:mscd000>nul 加载CD-ROM驱动到高端内存并传送到虚拟软盘/D是什么意思?
findcd /s>nul 不明白!是不是传送findcd.exe文件到虚拟软盘?
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 -sure -rb 自已恢得光盘的的winxp.gho文件。
请教>nul是传送相关文件到虚拟软盘的意思吧!别外我想不调用虚拟软盘,想直接从光盘中运行GHOST.exe。我是不是应该把它删去!??????
提取文件二:findcd.bat批处理文件 如下!
在GHOST.IMG下提取的FINCDC.BAT文件,应刻是光驱分配盘符的自动处理文件,能看懂一点。请高手指教!
@echo off 关闲显示
set file=%1 设置文件变量参数为%1
:FCDR 标号
if "%CDROM1%"=="%2:" goto SCDR 如果参数%1完全等于%2就跳转到标号scdr的语句。
shift 如果不完全相等,则左移一位,就是取A,B,C。。。
goto FCDR 跳到标号fcdr语句处
:SCDR 标号
cda %2:>nul 把光盘的文件加载到虚拟软盘???????????CDA是什么意思?
IF errorlevel 1 goto next 这一句不明白???
if not exist %2:\%FILE% goto next 不明白????
set cdrom=%2 应该是设置光驱盘符为变量%2取的值?
goto end 跳转到结束语句?
:next 标号!
if "%2"=="Z" goto end 如果变量%2完全等于Z则跳到结束语句。
shift 否则左很移一位。
goto SCDR 否则跳转到语句scdr处。
:end 结束语句。
我以上分析对不对,请老师给指教一二。另外,不想把光盘的文件加载到虚拟软盘上,直接在光盘
上调用是不是把 cda %2:>nul 这一句删除了就可以???
我想实践上述功能如何修改这两个批处理???
|
|
2006-2-15 12:50 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
2 楼』:
怎么没有人回贴,,,,,,,,自已顶一下,不能沉下去!
|
|
2006-2-16 15:34 |
|
|
wl00560
银牌会员
积分 1384
发帖 709
注册 2005-10-29
状态 离线
|
『第
3 楼』:
我比你还不如呢,嘻嘻,帮你顶一下。
|
|
2006-2-17 01:07 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
4 楼』:
Re sxhc6868:
你的理解很多都是正确的,我只对你原文理解有误或有偏差的地方做了简单的注释,重新张贴于下,愿与兄共鉴!
Quote: | 请教>nul是传送相关文件到虚拟软盘的意思吧!别外我想不调用虚拟软盘,想直接从光盘中运行GHOST.exe。我是不是应该把它删去!?????? |
|
>nul 是将命令执行后的输出信息重定向到空设备中,即隐藏信息输出。
从光盘调用 ghost.exe ,只需要在 ghost 前加上它在光盘中的路径即可
提取文件一:AUTOEXEC.BAT
@ECHO OFF
LH MSCDEX.EXE /D:mscd000>nul
:: 加载CD-ROM驱动到高端内存
findcd /s>nul
:: 寻找光驱并将其盘符保存入环境变量 %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
:: 调用批处理 findcdr.bat,检查光驱盘符 %cdrom1% 并写入到环境变量 %cdrom%
%CDROM%:
:: 切换至找到的光驱盘符
ghost -clone,mode=pload,src=winxpsp2.gho:1,dst=1:1 -sure -rb
:: 调用 ghost 从镜像文件 winxpsp2.gho 恢复。 提取文件二:findcd.bat(应为findcdr.bat)
@echo off
set file=%1
:: 设置环境变量 %file% 为命令行参数 %1 (即保存第一个参数 ghost.exe)
:FCDR
if "%CDROM1%"=="%2:" goto SCDR
:: 如果 %cdrom1% 等于 %2: 就跳转到标号scdr的语句,即匹配光驱盘符即发生跳转。
shift
:: 左移一次命令行参数,此时原 %2 变为 %1,%3 变为 %2 依次类推
goto FCDR
:: 继续 fcdr 循环
:: *** 此处代码存在问题,如果 %cdrom1% 未空(即未找到光驱盘符),则陷入死循环
:: *** 可在 shift 之后加一句 if "%2"=="" goto end 解决此问题
:SCDR
cda %2:>nul
:: 测试光驱 %2: 是否准备好光盘
if errorlevel 1 goto next
:: 返回错误码大于等于 1 即为未准备好,跳到 next 处判断是否继续 fcdr 循环
if not exist %2:\%FILE% goto next
:: 否则准备好,检查是否存在文件 %file% ,即前面保存的 ghost.exe ,如果没有则也跳至 next 处
set cdrom=%2
:: 否则光盘盘符 %2 有效,将之保存至环境变量 %cdrom% 中
goto end
:: 如果光驱盘符为 Z ,则认为循环结束,否则继续 fcdr 循环
:: *** 此处代码存在问题,因为 %cdrom1% 只保存了第一个光驱盘符,只能与命令行中盘符串成功匹配一次
:: *** 如果在第一次匹配成功的 scdr 中检测无法通过,则以后的检测都属多余操作
:: *** 在此建议:或者判断并改用 %cdrom2% 进行盘符匹配,或者在 scdr 中直接跳至 end 处结束
:next
if "%2"=="Z" goto end
shift
goto SCDR
:end
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2006-2-17 09:48 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
5 楼』:
谢谢版主,谢谢版主,等我仔细研究研究,不懂的地方再发贴请教!
|
|
2006-2-17 15:06 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
6 楼』:
版主:我有几个地方理解的不太清楚。请兄能否能解释一下!
一:nul 是将命令执行后的输出信息重定向到空设备中,即隐藏信息输出。
从光盘调用 ghost.exe ,只需要在 ghost 前加上它在光盘中的路径即可
这句话的意思是不是,NUL的作用是把程序运行的结果不在屏幕 上显示出来。
如果不加NUL参数,则运行结果就会在屏幕上显示出来?
二: 可在 shift 之后加一句 if "%2"=="" goto end 解决此问题
加这一句的意思是:没有找到相对应的光驱盘符,也跳转到结束,在实际应用
是是不是意味着这个计算机没有光驱。。。?????、
三: 此处代码存在问题,因为 %cdrom1% 只保存了第一个光驱盘符,只能与命令行中盘符串成功匹配一次
:: *** 如果在第一次匹配成功的 scdr 中检测无法通过,则以后的检测都属多余操作
:: *** 在此建议:或者判断并改用 %cdrom2% 进行盘符匹配,或者在 scdr 中直接跳至 end 处结束
这句话我理解的稀里湖涂的。。我的理解是,如果第一次匹配光驱成功,但是SCDR检测没有GHOST.EXE文件,则取光驱盘符不是Z时,左移一位,又跳到SCDR处,检测是否有GHOST.exe文件,直到检测到光驱上ghost.exe文件,假如,最后一个盘符也没有GHOST.EXE文件,但符合Z的条件,则结束整个程序。
是不是这样,为什么要加最后的那个 %cdrom2% 进行盘符匹配呢?另外,这个程序是不是能在双光驱的机子上找到GHOST.EXE文件,如果我说错了,要改的话,具体我改怎么改。
|
|
2006-2-18 19:36 |
|
|
Scott0902
中级用户
积分 466
发帖 237
注册 2005-10-12
状态 离线
|
『第
7 楼』:
一、没错
二、意味着没有加载光驱,或者光驱不存在。
|
|
2006-2-19 00:30 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
8 楼』:
Re sxhc6868:
十分抱歉!因为精力有限,对于非解答室的主题帖,我的回复往往会延迟数日。对你的三点问题分别回复如下:
一、确实如此,不过此处的 NUL 因为使用了重定向符号 > ,因而并不会传递给前面的 findcd 或者其它 DOS 命令与程序,所以此时它和 > 均不属于命令行参数。而是一个 DOS 下的逻辑设备,可以“吞噬”一切输入输出数据,copy nul test1.txt 就是比较典型的用例。
二、if "%2"=="" goto end 的直接含义为,命令行中盘符串循环匹配结束后,跳出循环不再匹配。这里存在以下几种可能:
1、%cdrom1% 有值,并且在 fcdr 中撇配成功,但在 scdr 中检测未通过;
2、%cdrom1% 有值,但并不是 c-z 的任何一个盘符,则程序始终无法成功匹配,最后跳出 fcdr 循环;
3、%cdrom1% 为空,程序也无法成功匹配,最后跳出end处结束 fcdr 循环。至于 %cdrom1% 是否为空,为何为空,这取决于程序所处的环境。可能是没有或未加载光驱,也可能是 findcd 执行错误,也可能是 DOS 环境空间溢出等,也可能是其它未知的原因。
三、你的理解和原程序在此处都是正确的,是我的理解有误,我将 :end 前的 goto scdr 理解为了 goto fcdr 。多谢指正!
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2006-2-20 14:16 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
9 楼』:
非常感谢版主!知道你非常忙,但是能得到你的回复心中十分高兴,是不是这贴子我发错地方了,,,,无意中发了个精品贴!
还有疑问版!我按照你说的修改了findcd.bat文件,加入了if "%2"=="" goto end 这一句,而后制成IMG文件,放入EASYBOOT中做成了ISO。选择GHOST,时,能进入GHOST。EXE,可是提示如下“A:\ghostterr.txt"选择退出或者继续,不知道是什么问题?
还有ISO文件的菜单二是DISKMAN,提示如下”打开文件LOOKBACK.BAT出错,你将不能使用回朔功能,
我想这是不是我没有加载虚拟软盘的原因!在原AUTOEXEC。BAT中如何加载!!
|
|
2006-2-21 13:18 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
10 楼』:
Re sxhc6868:
第一个问题:需要查看 A:\ghosterr.txt 文件内容才能知道具体原因,这是 ghost 生成的错误信息报告文件,里面应该有具体的错误号码和信息;
第二个问题: LOOKBACK.BAT 怀疑应为 LOOKBACK.DAT ,这是 diskman/diskgen 所要生成的数据文件,其中记录这 diskman/diskgen 的分区操作,以供“回溯”(即撤销);
这两个问题应该都与虚拟盘有关,可引导光盘大部分是模拟类引导,即模拟软驱(通常为A:)并加载软盘镜像作为虚拟软盘进行引导,而软盘启动过程中有可能还会利用内存再虚拟出一个内存磁盘(通常为硬盘后的第一个盘符)。
在这其间,因为光盘是只读的,无法写入任何临时文件和数据,因此所有会生成临时数据和文件的程序都应避免在光盘直接运行。而光盘虚拟出的虚拟软盘,因为虚拟方式的不同,有可能只读(很少一部分),有可能可写,因此许多软件都选择在虚拟软盘中运行。而虚拟软盘中再虚拟出的内存盘则必然可写,因此许多需要频繁读写临时数据的程序会选择在内存盘中。
根据你的情况,我建议将 diskman / ghost 直接放入可引导软盘镜像中,在光盘中使用此软盘镜像引导系统,或者在引导完成后将它们拷贝到虚拟软盘或内存盘中运行。
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2006-2-22 14:07 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
11 楼』:
谢谢版主,你说得都是非常专业的问题,"我建议将 diskman / ghost 直接放入可引导软盘镜像中,在光盘中使用此软盘镜像引导系统,或者在引导完成后将它们拷贝到虚拟软盘或内存盘中运行。"
我是个新手,以上面的例子为例,我应该如何去做.能说详细一点吗!
|
|
2006-2-22 16:46 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
12 楼』:
版主:我在网上查了资料!跟虚拟软盘有关系的几个命令如下:
ramdrive.sys 虚拟磁盘文件
xmsdsk.exe 虚拟内存盘创建程序!应该加载它吧!
具体是在autoexec.bat中还是在config.sys中加载,如何加载?
|
|
2006-2-22 19:05 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
13 楼』:
浏览量这么大,怎么就是没有人回,,,,,,,,,
|
|
2006-2-26 16:43 |
|
|
Scott0902
中级用户
积分 466
发帖 237
注册 2005-10-12
状态 离线
|
『第
14 楼』:
ramdrive.sys 必须在config.sys里加载
xmsdsk.exe 可以在config.sys或autoexec.bat里加载,运行 xmsdsk /? 查看详细用法。
|
|
2006-2-27 17:38 |
|
|
sxhc6868
初级用户
积分 50
发帖 19
注册 2006-2-15
状态 离线
|
『第
15 楼』:
@ECHO OFF
XMSDSK 2048 /Y
FINDRAMD
IF %RAMDRIVE%#==# GOTO NORAM
COPY COMMAND.COM %RAMDRIVE%\
COPY REBOOT.COM %RAMDRIVE%\
COPY EXTRACT.EXE %RAMDRIVE%\
EXTRACT /E /L %RAMDRIVE%\ EBD.CAB > NUL
SET COMSPEC=%RAMDRIVE%\COMMAND.COM
PATH=%RAMDRIVE%;A:
LH MSCDEX /D:IDE-CD /D:SCSI-CD /S /K
LH MOUSE.COM > NUL
%RAMDRIVE%
DISKGEN
GOTO SET
:NORAM
ECHO.
ECHO.
ECHO.
ECHO COMPUTER CAN NOT MAKE RAMDRIVER , IT WILL BE RESTART ......
PAUSE >
GOTO SET
:SET
echo MS-DOS 7.1 ...
这是DSIKMAN的AUTOEXEC.BAT文件!修改后的!也能正常运行
diskman,,,发出来,给大家共同分享!
|
|
2006-3-1 15:16 |
|