|
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就是虚拟磁盘的盘符
|
|