中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 批处理文件!谁能看懂? 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
sxhc6868
初级用户





积分 50
发帖 19
注册 2006-2-15
状态 离线
『第 2 楼』:  

怎么没有人回贴,,,,,,,,自已顶一下,不能沉下去!

2006-2-16 15:34
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
sxhc6868
初级用户





积分 50
发帖 19
注册 2006-2-15
状态 离线
『第 12 楼』:  

版主:我在网上查了资料!跟虚拟软盘有关系的几个命令如下:
ramdrive.sys 虚拟磁盘文件
xmsdsk.exe 虚拟内存盘创建程序!应该加载它吧!
具体是在autoexec.bat中还是在config.sys中加载,如何加载?

2006-2-22 19:05
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
sxhc6868
初级用户





积分 50
发帖 19
注册 2006-2-15
状态 离线
『第 13 楼』:  

浏览量这么大,怎么就是没有人回,,,,,,,,,

2006-2-26 16:43
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (149768318)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: