无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3193|回复: 1
打印 上一主题 下一主题

[讨论] dos下判断光驱盘符的大概原理学习

[复制链接]
跳转到指定楼层
1#
发表于 2016-10-15 18:06:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dos下判断光驱盘符所用批处理: AUTOEXEC.BAT和SETRAMD.BAT
所用文件:OAKCDROM.SYS ramdrive.sys(这两个文件在CONFIG.SYS中加载) findramd.exe(在SETRAMD.BAT)

了解一下%1这样的参数的定义,就明白了为什么要用两个批处理,同时要了解shift的用法
findramd.exe是用来判断是否存在虚拟磁盘,并返回一个值,这个值如果和AUTOEXEC.BAT中的LglDrv中的某一个数字相等,那么某一个数字后面的字母就是虚拟磁盘的盘符
判断光驱盘符其实是间接判断的,是判断了虚拟磁盘盘符同时就判断出了光驱盘符

AUTOEXEC.BAT:
set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15
set LglDrv=%LglDrv% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C
这两段内容可以写成:
set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15  O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C

除了27 *以外,都1个数字后跟1个字母,数字是用来和findramd.exe运行后的返回值比较,字母就是表示盘符

set LglDrv=后面的内容
为什么要倒着排列,是因为要判断光驱,根据dos分配盘符规则,光驱盘符是在虚拟磁盘盘符后的一个盘符
为什么要27 *这组数,如果不要27 *这组数,SETRAMD.BAT中两次shift执行下来,%2所对应的字母是Y,而虚拟磁盘盘符有可能是Z
为什么25后是Y 24后是X... 这可能跟 findramd.exe有关
---------------------------------------------------------------------------------------------
SETRAMD.BAT:
a:\findramd
if errorlevel 255 goto no_ramdrive
if not errorlevel 3 goto no_ramdrive
goto do_shift
:loop
if errorlevel %1 goto no_shift
:do_shift
set cdrom=%2                            先设置光驱盘符
shift
shift
if not %1*==* goto loop               
goto no_ramdrive
:no_shift
set ramd=%2                             设置虚拟磁盘的盘符
if "%RAMD%"=="C" goto c_drive
goto success

%1对应的是AUTOEXEC.BAT中的LglDrv中的数字  %2对应的是字母
先设置光驱盘符为%2, if条件循环配合shift使得%1和%2的参数值不断变化,当%1和findramd的返回值相等时就跳出循环,去设置虚拟磁盘的盘符
当%1和findramd的返回值相等时,shift前面的%2就是光驱的盘符,后面的%2就是虚拟磁盘的盘符
2#
发表于 2016-10-15 20:22:39 | 只看该作者
坐像个沙发吧
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-23 15:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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