无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
12
返回列表 发新帖
楼主: yaoyudx
打印 上一主题 下一主题

是我太笨???还是EZBOOT在搞笑

[复制链接]
31#
 楼主| 发表于 2005-5-25 13:00:30 | 只看该作者

是我太笨???还是EZBOOT在搞笑

感动,感动,这两天受益匪浅!!感觉兄弟们不厌其烦的给我解释!
回复

使用道具 举报

32#
发表于 2005-5-25 16:53:13 | 只看该作者

是我太笨???还是EZBOOT在搞笑

ok
回复

使用道具 举报

33#
发表于 2005-5-25 18:46:57 | 只看该作者

是我太笨???还是EZBOOT在搞笑

昨天太晚没回你,今天上班做了测试,解决方案与紫狐兄弟差不多不过偶分析了原因。偶可不知道紫狐兄弟说的那段历史,所以笨了一把,做了几个测试来证明这的确是一个BUG。
同时,也说明了此BUG产生的条件及解决方案。
以下是我上班时抽空写的,就不修改直接附上供大家参考吧:
恭喜,你发现了Wengier写的findcd的BUG,你可以去买彩票啦!:)
建议将贴子的标题改为:Easyboot的setup98.img及wengier之Findcd的BUG!
如何确认这是一个BUG?请在windows的dos窗口下手动执行下面语句
第一步:先观察正常时的情况
findce   //可以看到findcd设定了环境变量cdrom=H:  (我的光驱盘符)
echo %cdrom%   //查看一下变量cdrom的值是否是H:
可以看到输出结果是H:,这是正常是的情况。
第二步:展示findcd的BUG
set cdrom=f0023   //先不用findcd而就设置环境变量cdrom的值为f0023
findcd    //按理findcd执行后应该是cdrom=h:才对,是不是呢?
set       //来看一下环境变量cdrom到底是多少呢?
//你会发现cdrom=f0023
//        cdrom=h:
//环境变量中有两个cdrom!奇怪吧!
//dos可以设两个同名的环境变量吗?这个问题我最后解释,继续实验
set cdrom=      //删掉环境变量cdrom,看一下是怎样的
set            
//删掉了第一个set cdrom=f0023 ,还有一个cdrom=h:
set cdrom=     //再删一次
set
//这次删掉了findcd写入的环境变量cdrom=h:
第三步:更深入的研究
findcd      //现在cdrom=h:
set cdrom=f0023  //重设一下cdrom
set
//现在没有了两个cdrom环境变量,与dos统一了。
现在我来解释一下:
1:dos可以设两个相同的环境变量吗?
  set cdrom=0001
  set cdrom=0002
结果 cdrom=0002,所以答案是:不能。
2:既然dos不可设两个相同的环境变量,那么第二步中我们有两个相同的环境变量呢?
  这是findcd的BUG,也就是说,程序写得不完善。这个findcd直接在dos环境块中增加环境变量cdrom时,没有检测环境块中是否已存在cdrom这个环境变量是否存在就增加了cdrom环境变量,导致了两个cdrom环境变量的出现。因为不是通过dos内建set命令来执行,所以dos并不能修正它。
  
  理解了上面这段话的意思,则不难理解第三步我们的实验,因为dos内建命令是检测环境变量的,所以当findcd建了一个cdrom=h:后,set cdrom=f0023只能是改变findcd所建的cdrom的值,而不会出现findcd那样带来两个cdrom环境变量的问题。
  至于步骤2中set cdrom= 两次才能删掉环境变量cdrom就很好理解了。dos执行内建命令set xxx=  (空)作删除时不是遍列环境变量地删除,而是遇到第一个符合条件的环增变量就删除并退出了。
3:回到正题,你的关于easyboot自带的setup98.img的修改有问题吗?
:AUTOSETUP
set CDROM=FOO23  
FINDCD.EXE  
//如2中描述,现在有了两个环境变量CDROM=F0023 及CDROM=h:
set cdrom=   
//这个是你的修改,事实上它将删除第一个CDROM=F0023
//但我们仍有第二个CDROM=h:可用。  
if "%CDROM%"=="FOO23" goto NOCDROM
//这句话变成了 if H:=F0023 goto NOCDROM,所以你能成功运行安装程序
path=a:\;%CDROM%\
%CDROM%
cd \WIN98
echo.
OEMSETUP.EXE /K "/IE /NF"
goto QUIT
:NOCDROM
echo.
echo The Windows 98 Setup files were not found.
echo.
:QUIT
从上面我加的分析可看出,在CDROM被findcd检测到时这段程序是正确的。但是,如果findcd没检测到光驱呢?
请不要加载光驱,直接在真实dos的命令行(不是windows的cmd)下做一个测试:
set cdrom=f0023  //环境变量cdrom=f0023
findcd.exe       //没有发现光驱,findcd不作操作,所以环境变量cdrom=f0023不会改变
好了,现在我们来分析没光驱情况下加set cdrom= 有无危害
set CDROM=FOO23  
FINDCD.EXE  //假设findcd没检测到光驱,则findcd不操作环境变量,当前环境变量cdrom=f0023
set cdrom=   
//这个是你的修改,它将删除第一个CDROM=F0023,这样已经不存在了环境变量CDROM了。
if "%CDROM%"=="FOO23" goto NOCDROM
//这句话变成了 if (空)=F0023 goto NOCDROM ,出错了了吧,它永远不会跳转NOCDROM
path=a:\;%CDROM%\   //以下将会执行并出错。
%CDROM%
结论:从第3描述可看出,你这样的修改在光驱被findcd.exe检测到时是正确的,但如果光驱没被检测到将会出错。
4:如何避免Wengier的findcd的BUG而又使批处理更健壮呢?
  从结论可看出:findcd前不能有set cdrom=xxxx!,后不能有set cdrom= 删除语句,如下修改即可:
:AUTOSETUP
FINDCD.EXE  
IF %CDROM%#==# goto NOCDROM  
path=a:\;%CDROM%\
%CDROM%
cd \WIN98
echo.
OEMSETUP.EXE /K "/IE /NF"
goto QUIT
:NOCDROM
echo.
echo The Windows 98 Setup files were not found.
echo.
:QUIT

说明:
IF %CDROM%#==# goto NOCDROM  //仅判断cdrom变量存在与否就可以了判断光驱是否存在!
  
回复

使用道具 举报

34#
发表于 2005-5-29 15:20:13 | 只看该作者

是我太笨???还是EZBOOT在搞笑

希望多一些这样深入研究和讨论气氛的贴子,此贴加精。
回复

使用道具 举报

35#
发表于 2005-7-18 23:59:23 | 只看该作者

是我太笨???还是EZBOOT在搞笑

DOS的学问真不少,真奇怪MS会判它死刑
回复

使用道具 举报

36#
发表于 2005-7-19 01:16:31 | 只看该作者

是我太笨???还是EZBOOT在搞笑

同意4楼观点,虽然我没用过,但是这个批处理的确没问题
回复

使用道具 举报

37#
发表于 2005-7-19 01:37:26 | 只看该作者

是我太笨???还是EZBOOT在搞笑

我用这个setup98.img很成功的!
但是,由于光盘里面包含了很多DOS中文工具,觉得这个setup98.img用起来不方便,便自己动手修改了一下,效果是点击“安装WIN98”直接打开安装界面,没有选择菜单和等待时间。
而且,如果光盘根目录下包含WIN98文件夹,在2000或XP下运行光盘会提示“光盘上的Windows版本低于当前系统版本”,不能直接打开。我同时修改了WIN98文件夹为ZYJ98文件夹。
回复

使用道具 举报

38#
发表于 2005-7-19 12:58:41 | 只看该作者

是我太笨???还是EZBOOT在搞笑

有两个光驱以上,安装Win98就可能出错了(即安装光盘不是放在第一光驱时)
回复

使用道具 举报

39#
发表于 2005-7-19 13:14:26 | 只看该作者

是我太笨???还是EZBOOT在搞笑

[这个贴子最后由goffi在 2005/07/19 01:18pm 第 1 次编辑]

两个或者两个以上光驱的要增加一个判断部分,比如以光盘上的一个文件做条件,判断安装在哪一个光驱里,否则只能在第一个物理光驱上安装
98的安装盘本来就是这样的,和EZBOOT没什么关系
回复

使用道具 举报

40#
发表于 2005-7-19 17:11:11 | 只看该作者

是我太笨???还是EZBOOT在搞笑

肯定能用的!我用过了。
回复

使用道具 举报

41#
发表于 2007-3-19 21:47:42 | 只看该作者
旧帖子真是学问大呢?哪位将做好的win98.img和winme.img上传一下呢/
回复

使用道具 举报

42#
发表于 2014-1-2 14:48:00 | 只看该作者
我的情况和楼主一样,试了N次,FINDCD.EXE执行之后无法找到光驱而改变CDROM的值,最后永远都是F0023==F0023.但是我换了一个FINDCD.EXE程序,上面所有的语句就可以顺利执行了。
我觉得奇怪的是,在WIN98SE的原版ISO文件里是可以顺利执行的,FINDCD.EXE是可以正确执行的,我提取出引导文件之后,再原封不动的加载到另外的ISO文件里面就不能顺利执行了,不知道过程中哪儿出了问题。
回复

使用道具 举报

43#
发表于 2014-1-5 02:55:56 | 只看该作者
本帖最后由 2012hxwgz 于 2014-1-5 03:01 编辑

如果光盘中不存在\win98\setup.exe
微软98的findcd不起作用的.

微软98的findcd在多光盘的情况下可直接找到安装盘
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-11 09:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表