中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS启动盘 & LOGO技术 (启动盘室) » msdos710软盘启动以后自动调用硬盘上win98的方法探讨
« [1] [2] »
作者:
标题: msdos710软盘启动以后自动调用硬盘上win98的方法探讨 上一主题 | 下一主题
dos时代菜鸟
初级用户




积分 672
发帖 216
注册 2003-6-12
状态 离线
『楼 主』:  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]    用于返回字符串起始位置开始的n个字符
%变量名称%                           返回变量内容

要想在msdos710环境运行可以输入“ ndos /c loadwin ” 运行

loadwin.bat 程序内容如下:
*********************************************
@echo off
setlocal
if not exist c:\msdos.sys goto error
set x=%@lines[c:\msdos.sys]
set y=0
:loop
set winx1=%@line[c:\msdos.sys,%y%]
if %y%*==%x%* goto error
set l=%@eval[%@len[%winx1%]-7]
set winx=%@substr[%winx1%,0,6]
if #%winx%#==#WinDir# goto setdir
set y=%@eval[%y%+1]
goto loop

:setdir
set winx2=%@substr[%winx1%,7,%l%]
set winx3=%@substr[%winx2%,0,2]
%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
***************************************************




我是女孩,我怕谁?
2003-7-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27735
发帖 10521
注册 2002-10-9
状态 离线
『第 2 楼』:  

看了您的帖子,我刚才也自己写了一个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.

欢迎提出建议哦~~


[此贴子已经被作者于2003-7-13 19:54:23编辑过]






Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-11 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
savioler
中级用户




积分 422
发帖 136
注册 2002-11-9
状态 离线
『第 3 楼』:  

好,研究一下先

2003-7-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
如是大师
元老会员

步行的人


积分 9654
发帖 3351
注册 2003-3-11
来自 湖北
状态 离线
『第 4 楼』:  

wengier厉害。。



弄花香满衣,掬水月在手。
                 明月鹭鸟飞, 芦花白马走。
       我自一过后,野渡现横舟。
              青云碧空在,净瓶水不流。
http://dos.e-stone.cn/guestbook/index.asp
   ======中國DOS聯盟=====
我的新网页http://rsds.7i24.com欢迎光顾
2003-7-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yiyesong
元老会员




积分 1987
发帖 632
注册 2002-10-27
状态 离线
『第 5 楼』:  

呵呵,今天提出来好象有点晚了吧。WENEIER写的太复杂。



[flash=550,93]http://dos.e-stone.cn/dosbbs
uploadImages/200311161145850422.swf[/flash]
2003-7-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
电吉入侵
初级用户




积分 1480
发帖 377
注册 2003-6-6
状态 离线
『第 6 楼』:  

说说我的意见:
上面的批处理我还没看懂呢....
我的是光盘启动,  启动win之后虚拟盘会消失,  所以用启动盘启动不了win;  现在看到你们的帖,  我想可不可以这样呢:  用户肯定知道机器上有没有win ,先检查C 盘根目录有没有msdos.sys ,如果有就从那里调用启动win  ,如果没有就搜索win 在那个盘(一般在C 盘, 多系统可以在D \E) ;然后根据win  的位置,  创建一个适合的msdos.sys ,再调用启动...

这样也适合修复硬盘上的win 启动, 大家给点意见吧....



欢迎大家访问我的主页!
精品.爱好http://iso.533.net
2003-7-11 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (21039929)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27735
发帖 10521
注册 2002-10-9
状态 离线
『第 7 楼』:  



  Quote:
以下是引用yiyesong在2003-7-11 13:44:32的发言:
呵呵,今天提出来好象有点晚了吧。WENEIER写的太复杂。

YYS的特别版的启动盘中的那个在我的电脑上根本无法成功,是乱码后死机,只好按Ctrl+Alt+Del键重启。而且YYS的那个程序的局限性太大(完全依赖于LOCATE很不好),只支持Win98SE的中文版(其实我的系统中也有Win98SE的中文版,但它搜索时却总是死机)。所以我刚才自编了一个。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-11 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
yiyesong
元老会员




积分 1987
发帖 632
注册 2002-10-27
状态 离线
『第 8 楼』:  

WENGIER,你说的对,我那个批处理只为WIN98SE设计的,包括OEM版和零售版。因为现在用WIN3X和WIN98第一版已经很少了。我用DOS,但从不用WIN3X和WIN98第一版。如果要支持后二者,只要把LOCATE条件放宽就行了。
如果你是用我的启动盘启动的,出现乱码和死机只有一种可能,就是你在启动WIN98时把启动盘取出了。





[此贴子已经被作者于2003-7-11 21:31:39编辑过]






[flash=550,93]http://dos.e-stone.cn/dosbbs
uploadImages/200311161145850422.swf[/flash]
2003-7-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27735
发帖 10521
注册 2002-10-9
状态 离线
『第 9 楼』:  



  Quote:
以下是引用yiyesong在2003-7-11 21:29:18的发言:
WENGIER,你说的对,我那个批处理只为WIN98SE设计的,包括OEM版和零售版。因为现在用WIN3X和WIN98第一版已经很少了。我用DOS,但从不用WIN3X和WIN98第一版。如果要支持后二者,只要把LOCATE条件放宽就行了。
如果你是用我的启动盘启动的,出现乱码和死机只有一种可能,就是你在启动WIN98时把启动盘取出了。

没有!我没有把启动盘取出!是一直放在软驱中的。

LOCATE的条件放宽并非那么容易的,因为WIN.COM的大小和时间是可以随意更改的。比如说,如果我把WIN.COM中的内嵌LOGO换一个的话(就像我们做的MiniWin3.x就是这样的),那它的大小和时间就完全变了;而且,各种国际语言版本的WIN.COM的大小和时期也并非相同,这些就绝不是LOCATE所能处理的了。而且,那个功能不支持硬盘中有多个WIN的情况下进行手工选择。而我上面的那个批处理则都能完成。


[此贴子已经被作者于2003-7-11 21:45:08编辑过]






Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-11 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27735
发帖 10521
注册 2002-10-9
状态 离线
『第 10 楼』:  



  Quote:
以下是引用电吉入侵在2003-7-11 14:06:30的发言:
说说我的意见:
上面的批处理我还没看懂呢....
我的是光盘启动,  启动win之后虚拟盘会消失,  所以用启动盘启动不了win;  现在看到你们的帖,  我想可不可以这样呢:  用户肯定知道机器上有没有win ,先检查C 盘根目录有没有msdos.sys ,如果有就从那里调用启动win  ,如果没有就搜索win 在那个盘(一般在C 盘, 多系统可以在D \E) ;然后根据win  的位置,  创建一个适合的msdos.sys ,再调用启动...

这样也适合修复硬盘上的win 启动, 大家给点意见吧....

哪些地方还没有看懂呢?
大家倒可以对我上面编的那个批处理文件加入更多的功能,以进行进一步的完善呢。。




Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-13 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
Roy
管理员

專業島民



积分 4869
发帖 1633
注册 2002-12-10
状态 离线
『第 11 楼』:  

還有一項是不能忽略的,是排除"啟動"Windows NT/2000/XP的功能.
大家是知道,Windows NT/2000/XP都是有win.com的,可是這個win.com不能被MS-DOS所執行,而是被NTLDR執行的.



我的網站:http://mw16.2ya.com/ 我的網誌: http://scrappedblog.blogspot.com/
~
我的Winamp正在播放的歌曲:
2003-7-13 00:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27735
发帖 10521
注册 2002-10-9
状态 离线
『第 12 楼』:  



  Quote:
以下是引用Roy在2003-7-13 8:49:01的发言:
還有一項是不能忽略的,是排除"啟動"WindowsNT/2000/XP的功能.
大家是知道,WindowsNT/2000/XP都是有win.com的,可是這個win.com不能被MS-DOS所執行,而是被NTLDR執行的.

是呀。。我上面的那个批处理就能自能排除WinNT/2K/XP的“假”WIN.COM的,而只搜索Win3.x/9x/ME的。(说明:我的硬盘上既有Win3.x,又有Win9x,又有WinME,又有Win2K,用它自动搜索的效果就很理想的。。)

[此贴子已经被作者于2003-7-13 9:02:16编辑过]






Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-13 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
电吉入侵
初级用户




积分 1480
发帖 377
注册 2003-6-6
状态 离线
『第 13 楼』:  

我在多重启动的光盘上怎样也启动不了win98  , 用软盘和单重启动光盘就可以; 但单重光盘启动后软驱里有一个虚拟软盘,  用不了真软驱了....

大家有没有办法在多重启动光盘上实现启动win9X呢?



欢迎大家访问我的主页!
精品.爱好http://iso.533.net
2003-7-13 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (21039929)  编辑帖子  回复  引用回复
电吉入侵
初级用户




积分 1480
发帖 377
注册 2003-6-6
状态 离线
『第 14 楼』:  

Wengier 你不是说只要有
[Paths]
WinBootDir=.

就可以了吗?  但我的不行啊一定要
[Paths]
WinDir=a:\
WinBootDir=.
HostWinBootDrv=a

才可以啊,   为什么?

[此贴子已经被作者于2003-7-13 21:20:54编辑过]






欢迎大家访问我的主页!
精品.爱好http://iso.533.net
2003-7-13 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (21039929)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27735
发帖 10521
注册 2002-10-9
状态 离线
『第 15 楼』:  



  Quote:
以下是引用电吉入侵在2003-7-13 19:52:55的发言:
Wengier你不是说只要有
[Paths]
WinBootDir=.

就可以了吗?但我的不行啊一定要
[Paths]
WinDir=a:\
WinBootDir=.
HostWinBootDrv=a

才可以啊,为什么?

那是因为没有windir项时,系统启动时将不自动加载IFSHLP.SYS文件的原因吧。。这时手工在命令行上加载就行了,例如用DEVICE/DEVLOAD/ADDEV命令。然后再WIN就一切OK了。或者加入windir当然也行。而HostWinBootDrv通常则完全不需要,除非有DBLSPACE/DRVSPACE之类的磁盘压缩程序。


[此贴子已经被作者于2003-7-14 8:59:58编辑过]






Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-14 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: