|
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 |
|
|
savioler
中级用户
  
积分 422
发帖 136
注册 2002-11-9
状态 离线
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
Roy
管理员
          專業島民
积分 4869
发帖 1633
注册 2002-12-10
状态 离线
|
|
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 |
|
|
电吉入侵
初级用户
 
积分 1480
发帖 377
注册 2003-6-6
状态 离线
|
『第
13 楼』:
我在多重启动的光盘上怎样也启动不了win98 , 用软盘和单重启动光盘就可以; 但单重光盘启动后软驱里有一个虚拟软盘, 用不了真软驱了....
大家有没有办法在多重启动光盘上实现启动win9X呢?
|

欢迎大家访问我的主页!
精品.爱好http://iso.533.net |
|
2003-7-13 00:00 |
|
|
电吉入侵
初级用户
 
积分 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 |
|
|
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 |
|