中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 寻找虚拟磁盘盘符的问题---ramdrive
作者:
标题: 寻找虚拟磁盘盘符的问题---ramdrive 上一主题 | 下一主题
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『楼 主』:  寻找虚拟磁盘盘符的问题---ramdrive

寻找dos的虚拟磁盘盘符程序 ---问题求解 在dos里面寻找虚拟磁盘盘符,其目的在于编程时便于指定目标。 问题求解---关于dos的 寻找ramdrive虚拟磁盘的程序 我用grub,winiamg做了个dos镜像启动。,再用UltraISO做了个光盘镜像start.ISO,我在winxp上。有两个镜像一个是start.img,另一个是start.iso。 grub的配置菜单menu.lst如下: color black/cyan yellow/cyan timeout 15 default 0 title memdrive duplicated from floppy image file (hd0,0)/start.img map --mem (hd0,0)/start.img (fd0) map --hook chainloader (fd0)+1 rootnoverify (fd0) savedefault --wait=2 title find and load NTLDR of Windows NT/2K/XP fallback 1 find --set-root /ntldr chainloader /ntldr savedefault --wait=2 title cdrom-start from start.sio map --mem (hd0,0)/start.iso (hd32) map --hook chainloader (hd32) boot title commandline savedefault --wait=2 commandline #外部命令不能用。 #title floppy (fd0) 这是软盘启动,我没有,所以注释掉。 #chainloader (fd0)+1 #rootnoverify (fd0) #savedefault --wait=2 title back to dos savedefault --wait=2 quit title reboot savedefault --wait=2 reboot title halt savedefault --wait=2 halt 经检验,各种启动方式都可以正常的进入dos。 我的config.sys配置如下: [menu] menuitem=nomal, ###### nomal load cdrom menuitem=myself,###### no cdrom menudefault=nomal,10 menucolor=2,0 [nomal] device=himem.sys /testmem:off device=emm386.exe ram device=vide-cdd.sys /d:mscd001 [myself] device=himem.sys device=emm386.exe ram [common] dos=high,umb devicehigh=ramdrive.sys 2048 /e ;devicehigh=drvspace.sys /move files=10 buffers=10 lastdrive=z 看到这句没有:devicehigh=ramdrive.sys 2048 /e 我加载了ramdrive。这时的虚拟盘的盘符在环境变量里面用set看不到。 于是我写了下面的framd.bat程序,用来寻找环境变量,即找虚拟磁盘的盘符: @echo off rem find disk ms-ms-ramdrive set ramd=0 ,vol c: | find /i "c is ms-ramdrive" ,if not errorlevel 1 set ramd=c: ,if not %ramd%==0 goto end vol d: | find /i "d ms-ramdrive" if not errorlevel 1 set ramd=d: if not %ramd%==0 goto end vol e: | find /i "e is ms-ramdrive" if not errorlevel 1 set ramd=e: if not %ramd%==0 goto end vol f: | find /i "f is ms-ramdrive" if not errorlevel 1 set ramd=f: if not %ramd%==0 goto end vol g: | find /i "g is ms-ramdrive" if not errorlevel 1 set ramd=g: if not %ramd%==0 goto end vol h: | find /i "h is ms-ramdrive" if not errorlevel 1 set ramd=h: if not %ramd%==0 goto end vol i: | find /i "i is ms-ramdrive" if not errorlevel 1 set ramd=i: if not %ramd%==0 goto end vol j: | find /i "j is ms-ramdrive" if not errorlevel 1 set ramd=j: if not %ramd%==0 goto end vol k: | find /i "k is ms-ramdrive" if not errorlevel 1 set ramd=k: if not %ramd%==0 goto end vol l: | find /i "l is ms-ramdrive" if not errorlevel 1 set ramd=l: if not %ramd%==0 goto end vol m: | find /i "m is ms-ramdrive" if not errorlevel 1 set ramd=m: if not %ramd%==0 goto end vol n: | find /i "n is ms-ramdrive" if not errorlevel 1 set ramd=n: if not %ramd%==0 goto end vol o: | find /i "o is ms-ramdrive" if not errorlevel 1 set ramd=o: if not %ramd%==0 goto end vol p: | find /i "p is ms-ramdrive" if not errorlevel 1 set ramd=p: if not %ramd%==0 goto end vol q: | find /i "q is ms-ramdrive" if not errorlevel 1 set ramd=q: if not %ramd%==0 goto end vol r: | find /i "r is ms-ramdrive" if not errorlevel 1 set ramd=r: if not %ramd%==0 goto end vol s: | find /i "s is ms-ramdrive" if not errorlevel 1 set ramd=s: if not %ramd%==0 goto end vol t: | find /i "t is ms-ramdrive" if not errorlevel 1 set ramd=t: if not %ramd%==0 goto end vol u: | find /i "u is ms-ramdrive" if not errorlevel 1 set ramd=u: if not %ramd%==0 goto end vol v: | find /i "v is ms-ramdrive" if not errorlevel 1 set ramd=v: if not %ramd%==0 goto end vol w: | find /i "w is ms-ramdrive" if not errorlevel 1 set ramd=w: if not %ramd%==0 goto end vol x: | find /i "x is ms-ramdrive" if not errorlevel 1 set ramd=x: if not %ramd%==0 goto end vol y: | find /i "y is ms-ramdrive" if not errorlevel 1 set ramd=y: if not %ramd%==0 goto end vol z: | find /i "z is ms-ramdrive" if not errorlevel 1 set ramd=z: :end echo disk ms-ramdrive is finded! ok.//////zunyi. rem 本程序只可以在虚拟软盘启动是才正确。光盘启动不正确。错误在那里呢。我不知道。 以上用的是管道命令。for我试过,冲突的。但我想可以用shift配合for写。可以简化程序的。 附注:我的autoexec.bat 文件: @echo off set path=c:\;c:\dos;c:\dos\dosshell;c:\dos\pqmagic;d:\;d:\dos;d:\dos\dosshell;d:\dos\pqmagic;e:\;e:\dos;e:\dos\dosshell;e:\dos\pqmagic;f:\;f:\dos;f:\dos\dosshell;f:\dos\pqmagic;g:\;g:\dos;g:\dos\dosshell;g:\dos\pqmagic;h:\;h:\dos;h:\dos\dosshell;h:\dos\pqmagic;a:\;a:\dos;a:\dos\dosshell;a:\dos\pqmagic call a:\framd.bat goto %config% :nomal lh ctmouse lh doskey lh mscdex /d:mscd001 rem mscdex /d:mscd001 /l:z ---drivee no.1,driver letter Z lh smartdrv lh findcd rem find cdrom goto end :myself lh ctmouse lh doskey goto end :end echo #################### echo Let's Go!ZHAO WD .ZUNYI.2009-2-1 说明:在windows下做双启动我个人觉得用镜像启动是比较方便的方法。 只需要如下几个文件就可以了 1*grub.exe,menu..lst,grldr,start.img(或start.ima),start.iso ,把这几个文件放到C盘根目录(其实可放到任何地方,只要把路径指明就可以了) 2*在windowns的boot.ini文件的最后添加一行:c:\grub.exe="我的dos“ 就可以了 3*现在是windows时代,dos最大的作用就两个:还原备份系统。还有一个就是操作模拟dos(命令提示符)。dos里面的有好多命令该舍弃了。如:country,killer,setver等等。所以我觉得围绕命令提示符学校古老的dos,应该是一个方向。 现在问题出来了:如果我是进入dos选用第一启动及用start.img一切正常。如果我选用地3种启动及用start.iso启动,这时的环境变量会是 啊a: 即set 回车显示 ramd=a: ,这就与实际的虚拟磁盘的盘符不符合了。但是如果我此时把程序framd.bat 复制到硬盘上,然后从任一个盘符下输入,比如d:>framd.bat 回车,则就又可以找到,准确的虚拟盘符。 这个问题谁能解决???????????????????????????? 注明:menu.lst英语单词翻译 color---颜色,timeout---等待时间,defaul---默认, title---标题。 memdrive---内存盘, map---映射。mem---内存盘,chainloader---链式装载 root---根,vverity----校验,save---保存, falback ---备用,commandline---命令行, ,find---查找,root---引导,reboot---重引导,set---设置,guit---退出, halt---停此,wait---等待 本文有104空间发布:http:\\104kj.net.cn [ Last edited by 5yue5 on 2009-2-12 at 14:54 ]


2009-2-9 23:40
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『第 2 楼』:  希望能看到回答-

等了几天了。没人回答。晕了。 给我提供一个思路也可以呀。


2009-2-12 14:55
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 3 楼』:  

你的RAMDrive用法我不知道, 但是: 在autoexec.bat 里加入 xmsdsk 6000 x: /y >nul 生成的RAMDrive是不用找的。是想指定那个就是哪个。 xmsdsk.exe 下载: rthost.fam.cx/cndos- ...




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-2-12 22:40
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『第 4 楼』:  谢谢3楼

xmsdsk 的确比ramdrive好用。但是ramdrive是ms的东西。所以我还是想用这个。


2009-2-12 22:52
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 5 楼』:  

不明白,你的ramd初始也是0呀,怎么就得出a:了呢? 如果是在a:盘外可以正确的话,试试在前面先转到c: 找到ramd后,再转回a:看行不行。




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-2-12 23:12
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
5yue5
初级用户





积分 69
发帖 34
注册 2009-2-8
状态 离线
『第 6 楼』:  谢谢5楼

我的ramd初值是0.那是这样的 set ramd=0 。是环境变量的初值。这个值定多少都没关系的。 操作环境变量, 就是控制内存, 控制内存就是控制计算机。 其实 思路就是把找到的虚拟磁盘符,借助于环境变量读到内存去。 程序 我在真实的计算机上 和虚拟机上都验证了。没问题的。 [ Last edited by 5yue5 on 2009-2-14 at 09:23 ]


2009-2-14 09:15
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 7 楼』:  

就是在framd.bat里面 开头加上:C: 最后加上:A: 看看能不能解决问题,




精简 [你的+我的+他的]=>[大家的] 个人网志
2009-2-14 12:58
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: