中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-19 06:34
47,814 主题排行 / 349,908 发帖 / 今日 1 篇 / 48,259 会员排行
DOS疑难解答 & 问题讨论 (解答室) » 请教,纯DOS下如何获取当前盘符?
可打印版本  3,646 / 37
第16楼 Climbing 发表于 2007-12-23 21:19
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
Originally posted by qzwqzw at 2007-12-23 13:59:
获取U盘引导盘盘符的话
我用的是%comspec%变量

第17楼 qzwqzw 发表于 2007-12-23 23:00
银牌会员 发帖 636 积分 2,343
还是要具体情况具体分析

没错这种方法用途有限
config.sys的shell和autoexec.bat的set可能会把%comspec%改得五花八门
我一般也只用在自己的autoexec.bat中
而且通常放在建立内存盘之前
而获取的%sysdrive%也只能用在自己编写的应用批处理中

而为了兼容它人编写的批处理代码
我通常会在autoexec.bat中先检查A盘是否可读
如果不可读则subst a: c:\建立虚拟A盘
以兼容其它一些可能会读A盘的代码
第18楼 chenall 发表于 2007-12-23 23:48
银牌会员 发帖 469 积分 1,276 来自 福建泉州
我觉得还是通过U盘里面的一个特殊文件来判断比较保险.
因为其它方法,都有N种可能.而用特殊文件,就不会.

PS:好久没有看到willsort了.好崇拜willsort.批处理牛.汇编也牛.呵呵

[ Last edited by chenall on 2007-12-23 at 11:52 PM ]
第19楼 lianjiang2004 发表于 2007-12-24 07:37
金牌会员 发帖 1,884 积分 3,946
Originally posted by Climbing at 2007-12-23 21:19:


这种方法是见仁见智的,因为有的启动盘会在启动时建立内存盘,并将command.com复制到内存盘上并修改comspec环境变量指向内存盘的command.com。所以,还是要具体情况具体分析。

自己制作的启动盘里使用时没问题的,只要在autoexec的开头就把此参数赋予一个变量即可。
第20楼 qzwqzw 发表于 2007-12-24 23:53
银牌会员 发帖 636 积分 2,343
文件标记也具有局限性
USB-FDD模式有可能读不到这个标记文件
USB-CD模式则可能在读无盘的真实光驱时卡壳
USB-HDD和USB-ZIP则无法避免这个异常
在只有C盘或A盘时再去判断另外一个盘上的文件
可能会因为设备未准备好而出现异常
第21楼 lianjiang2004 发表于 2007-12-25 08:06
金牌会员 发帖 1,884 积分 3,946
Originally posted by qzwqzw at 2007-12-24 23:53:
文件标记也具有局限性
USB-FDD模式有可能读不到这个标记文件
USB-CD模式则可能在读无盘的真实光驱时卡壳
USB-HDD和USB-ZIP则无法避免这个异常
在只有 ...


采用特征文件方法的话,我采用的是只判断C:\有无此文件,没有的话,就认为不是usb-hdd方式启动的。硬盘号为1.

接下来准备在此基础上,加上第1硬盘是否只有一个分区的判断。
第22楼 chishingchan 发表于 2007-12-25 10:50
银牌会员 发帖 538 积分 1,284
lianjiang2004 的文字表达不错,就是不给你结果,让你自己摸索、让你自己解决!
第23楼 logan0279 发表于 2007-12-26 10:22
初级用户 发帖 45 积分 100
Originally posted by chishingchan at 2007-12-22 10:50 PM:


照你这样说来是可以的呀!

恢复:


问题就在于dst这里,U盘在不同的机器上识别是不同的,有机器将其识别为硬盘,这样的话,就应是dst=2:1,而有的机器将其识别为软盘,这样就应是dst=1:1,所以需要知道当前盘符是A还是C,然后才能使用相应的参数的呀!
第24楼 logan0279 发表于 2007-12-26 10:30
初级用户 发帖 45 积分 100
哈哈,看到我的帖子引得这么多讨论,真是高兴啊!可惜我是个菜鸟,好多都看得云里雾里,以后得多多努力了!
第25楼 lianjiang2004 发表于 2007-12-26 14:16
金牌会员 发帖 1,884 积分 3,946
Originally posted by chishingchan at 2007-12-25 10:50:
lianjiang2004 的文字表达不错,就是不给你结果,让你自己摸索、让你自己解决!


包括你提出的问题,不是我不给结果,你的问题一开始我就给出了我用的代码,可惜答非所问。
从那些代码,你也能看出,我并不擅长批处理,无法像高手那样用短短几行解决问题,需要用最笨的办法来实现。

同时,在无法正确把握提问题意图的情况下,你说有必要费很长时间来些可能并非别人需要的具体解决方案吗?

就像你的问题,一直无法理解意图,如何操作?呵呵。

当然并不妨碍我根据自己的理解和经验,提出自己的看法供别人参考。
第26楼 terse 发表于 2007-12-26 15:16
银牌会员 发帖 946 积分 2,404
我在AUTOEXEC.BAT里这样处理的:
CD>%TEMP%\DRV.TXT
strings ud=read %TEMP%\DRV.TXT,1
%ud%就是启动盘符

你可以IF一下 是A就SET DST=1:1 是C就SET DST=2:1

[ Last edited by terse on 2007-12-26 at 03:21 PM ]
第27楼 logan0279 发表于 2007-12-30 16:46
初级用户 发帖 45 积分 100
今天无事看下DOS之家的优盘启动盘,发现一个似乎更好的方法:

cd\
dir |find "drive C" && goto bootc

:boota
......

:bootc
......

不过这种方法只适用于从优盘直接启动到DOS,并且这段代码最好要在AUTOEXEC.BAT里面

[ Last edited by logan0279 on 2008-1-1 at 12:34 PM ]
第28楼 logan0279 发表于 2008-01-01 12:37
初级用户 发帖 45 积分 100
受达人 qzwqzw 的启法,结合FOR命令,还有一种方法也可以得知U盘启动盘盘符:

for /f "delims=:\ tokens=1" %%i in ('echo %comspec%') do set sysdrive=%%i:

这段码在CMD环境下测试通过,不晓得在纯DOS下可不可以!
第29楼 logan0279 发表于 2008-01-01 12:38
初级用户 发帖 45 积分 100
而获取当前盘符则可以用以下这段代码:

for /f "delims=:\ tokens=1" %%i in ('CD') do set subdrive=%%i:
第30楼 logan0279 发表于 2008-01-01 13:25
初级用户 发帖 45 积分 100
真郁闷死了,在纯DOS下居然不行!哎,可怜我的一腔激情啊!
上一页  1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023