![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-06 09:47 |
共 47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS启动盘 & LOGO技术 (启动盘室) » msdos710软盘启动以后自动调用硬盘上win98的方法探讨 |
| 可打印版本 2,373 / 17 |
| 第1楼 dos时代菜鸟 | 发表于 2003-07-11 00:00 |
| 初级用户 发帖 216 积分 672 | |
|
msdos710软盘启动以后自动调用硬盘上win98的方法探讨 斑竹的msdos710启动盘很好用,但是如果要想运行硬盘上的windows98就需要手动进入windows98安装路径,运行之,小女子写了一个ndos的批处理程序用来自动调用硬盘中的win98.
工作原理如下:程序先找到c:\msdos.sys,然后通过循环方式对msdos.sys文件中的每一行文字进行一一排查,如果找到“WinDir=”语句,就将其设置为变量,并退出循环,根据windir的对应值找到win98的安装路径,并运行win98. 在此抛砖引玉,希望大家多多努力。这个程序也可以使用xset代替ndos完成。 其中涉及到的几个ndos内部函数如下: %@lines 用于返回文件的行数 %@line 用于返回文件指定行的内容 %@len 用于返回字符串的长度 %@eval 用于返回+-*/运算的结果 %@substr 用于返回字符串起始位置开始的n个字符 %变量名称% 返回变量内容 要想在msdos710环境运行可以输入“ ndos /c loadwin ” 运行 loadwin.bat 程序内容如下: ********************************************* @echo off setlocal if not exist c:\msdos.sys goto error set x=%@lines set y=0 :loop set winx1=%@line if %y%*==%x%* goto error set l=%@eval-7] set winx=%@substr if #%winx%#==#WinDir# goto setdir set y=%@eval goto loop :setdir set winx2=%@substr set winx3=%@substr %winx3% cd %winx2% path %winx2%;%winx2%\command set x= set y= set l= set winx1= set winx2= set winx3= set winx= WIN /D:N :error echo ERROR ! windows_9x_Path unknowed !!! echo 1.THERE IS NOT C:\MSDOS.SYS! ECHO 2.C:\MSDOS.SYS can not load Windows9x! ECHO Press any key to continue! PAUSE>NUL goto end :end endlocal quit *************************************************** |
|
| 第2楼 Wengier | 发表于 2003-07-11 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
看了您的帖子,我刚才也自己写了一个FINDWIN.BAT批处理程序,专门用来在DOS下直接自动搜索硬盘上的所有的Win3.x/9x/Me(是不需windir变量的那种)。即使WIN.COM已被改名(我的就是),它也可以找到的呢~~这个批处理程序需要三个文件,分别是STRINGS.COM、XFIND.EXE,以及LOCATE.COM(这三个文件都已在我的MS-DOS 7.10启动盘中)。而且它在找到搜索结果后,结果如果发现硬盘中有多于一个WIN的话,会让用户进行选择合适的WIN以进入。不过,由于是自动搜索,所以搜索时速度当然还是有点儿慢呢。。以下是批处理的内容:
@echo off set n= set m=0 if exist verfiles.dat del verfiles.dat if exist winfiles.dat del winfiles.dat echo DOS-based Windows(Win3.x/9x/Me) Finder + Loader echo. echo Now searching for Windows on your hard drives... locate win.ini /r /n /np > verfiles.dat strings s=filesize verfiles.dat if %s%==0 goto nowin strings n=linesize verfiles.dat strings n=add %n%,1 :loop strings m=add %m%,1 strings s=read verfiles.dat,%m% strings c=filedrive %s% strings d=filedir %s% xfind /C " ALT+ENTER " %c%%d%\*.com >> winfiles.dat if %m%==%n% goto next goto loop :nowin echo. echo Warning: Can''''''''t find any possible Windows on your hard drives! goto end :wrong echo Wrong input! Please reenter! goto input :next strings n=linesize winfiles.dat strings n=add %n%,1 set m= strings m=sub %n%,10 > nul if not %m%#==# echo Warning: Too many possible Windows found. Only first 9 will be shown. if not %m%#==# set n=9 echo. echo There are %n% possible Windows on your hard drives: echo. if %n%==1 strings s=read winfiles.dat,1 if %n%==1 goto start set m=0 :read strings m=add %m%,1 strings s=read winfiles.dat,%m% echo %m%: %s% if not %m%==%n% goto read echo. :input set k= set m= echo Please enter the number of Windows you want to enter (1-%n%,ESC=Exit): strings k=getkey if %k%#==# goto end if %k%==27 goto end strings m=sub %k%,48 >nul if %m%#==# goto wrong if %m%#==0# goto wrong set k=%m% set m= strings m=sub %n%,%k% >nul if %m%#==# goto wrong strings s=read winfiles.dat,%k% if not exist %s% goto wrong echo %k% :start strings c=filedrive %s% strings d=filedir %s% echo Now trying to start Windows from: %s% pause %c% cd %d% %s% cd\ :end echo. echo Done. echo. if exist verfiles.dat del verfiles.dat if exist winfiles.dat del winfiles.dat set n= set m= set s= set c= set d= set k= rem Made by Wengier, China DOS Union. All rights reserved. 欢迎提出建议哦~~ |
|
| 第3楼 savioler | 发表于 2003-07-11 00:00 |
| 中级用户 发帖 136 积分 422 | |
|
好,研究一下先
|
|
| 第4楼 如是大师 | 发表于 2003-07-11 00:00 |
| 元老会员 发帖 3,351 积分 9,654 来自 湖北 | |
|
wengier厉害。。
|
|
| 第5楼 yiyesong | 发表于 2003-07-11 00:00 |
| 元老会员 发帖 632 积分 1,987 | |
|
呵呵,今天提出来好象有点晚了吧。WENEIER写的太复杂。
|
|
| 第6楼 电吉入侵 | 发表于 2003-07-11 00:00 |
| 初级用户 发帖 377 积分 1,480 | |
|
说说我的意见:
上面的批处理我还没看懂呢.... 我的是光盘启动, 启动win之后虚拟盘会消失, 所以用启动盘启动不了win; 现在看到你们的帖, 我想可不可以这样呢: 用户肯定知道机器上有没有win ,先检查C 盘根目录有没有msdos.sys ,如果有就从那里调用启动win ,如果没有就搜索win 在那个盘(一般在C 盘, 多系统可以在D \E) ;然后根据win 的位置, 创建一个适合的msdos.sys ,再调用启动... 这样也适合修复硬盘上的win 启动, 大家给点意见吧.... |
|
| 第7楼 Wengier | 发表于 2003-07-11 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
以下是引用yiyesong在2003-7-11 13:44:32的发言: YYS的特别版的启动盘中的那个在我的电脑上根本无法成功,是乱码后死机,只好按Ctrl+Alt+Del键重启。而且YYS的那个程序的局限性太大(完全依赖于LOCATE很不好),只支持Win98SE的中文版(其实我的系统中也有Win98SE的中文版,但它搜索时却总是死机)。所以我刚才自编了一个。 |
|
| 第8楼 yiyesong | 发表于 2003-07-11 00:00 |
| 元老会员 发帖 632 积分 1,987 | |
|
WENGIER,你说的对,我那个批处理只为WIN98SE设计的,包括OEM版和零售版。因为现在用WIN3X和WIN98第一版已经很少了。我用DOS,但从不用WIN3X和WIN98第一版。如果要支持后二者,只要把LOCATE条件放宽就行了。
如果你是用我的启动盘启动的,出现乱码和死机只有一种可能,就是你在启动WIN98时把启动盘取出了。 |
|
| 第9楼 Wengier | 发表于 2003-07-11 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
以下是引用yiyesong在2003-7-11 21:29:18的发言: 没有!我没有把启动盘取出!是一直放在软驱中的。 LOCATE的条件放宽并非那么容易的,因为WIN.COM的大小和时间是可以随意更改的。比如说,如果我把WIN.COM中的内嵌LOGO换一个的话(就像我们做的MiniWin3.x就是这样的),那它的大小和时间就完全变了;而且,各种国际语言版本的WIN.COM的大小和时期也并非相同,这些就绝不是LOCATE所能处理的了。而且,那个功能不支持硬盘中有多个WIN的情况下进行手工选择。而我上面的那个批处理则都能完成。 |
|
| 第10楼 Wengier | 发表于 2003-07-13 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
以下是引用电吉入侵在2003-7-11 14:06:30的发言: 哪些地方还没有看懂呢? 大家倒可以对我上面编的那个批处理文件加入更多的功能,以进行进一步的完善呢。。 |
|
| 第11楼 Roy | 发表于 2003-07-13 00:00 |
| 管理员 发帖 1,633 积分 4,869 | |
|
還有一項是不能忽略的,是排除"啟動"Windows NT/2000/XP的功能.
大家是知道,Windows NT/2000/XP都是有win.com的,可是這個win.com不能被MS-DOS所執行,而是被NTLDR執行的. |
|
| 第12楼 Wengier | 发表于 2003-07-13 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
以下是引用Roy在2003-7-13 8:49:01的发言: 是呀。。我上面的那个批处理就能自能排除WinNT/2K/XP的“假”WIN.COM的,而只搜索Win3.x/9x/ME的。(说明:我的硬盘上既有Win3.x,又有Win9x,又有WinME,又有Win2K,用它自动搜索的效果就很理想的。。) |
|
| 第13楼 电吉入侵 | 发表于 2003-07-13 00:00 |
| 初级用户 发帖 377 积分 1,480 | |
|
我在多重启动的光盘上怎样也启动不了win98 , 用软盘和单重启动光盘就可以; 但单重光盘启动后软驱里有一个虚拟软盘, 用不了真软驱了....
大家有没有办法在多重启动光盘上实现启动win9X呢? |
|
| 第14楼 电吉入侵 | 发表于 2003-07-13 00:00 |
| 初级用户 发帖 377 积分 1,480 | |
|
Wengier 你不是说只要有
WinBootDir=. 就可以了吗? 但我的不行啊一定要 WinDir=a:\ WinBootDir=. HostWinBootDrv=a 才可以啊, 为什么? |
|
| 第15楼 Wengier | 发表于 2003-07-14 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
以下是引用电吉入侵在2003-7-13 19:52:55的发言: 那是因为没有windir项时,系统启动时将不自动加载IFSHLP.SYS文件的原因吧。。这时手工在命令行上加载就行了,例如用DEVICE/DEVLOAD/ADDEV命令。然后再WIN就一切OK了。或者加入windir当然也行。而HostWinBootDrv通常则完全不需要,除非有DBLSPACE/DRVSPACE之类的磁盘压缩程序。 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |