中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-02 06:20
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 请教,纯DOS下如何获取当前盘符? 查看 3,376 回复 37
16 发表于 2007-12-23 21:19 ·  中国 河北 保定 移动
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
Originally posted by qzwqzw at 2007-12-23 13:59:
获取U盘引导盘盘符的话
我用的是%comspec%变量


if "%comspec%"=="C:\COMMAND.COM" set sysdrive=C:
if "%comspec%"=="A:\COMMAND.COM" se ...


这种方法是见仁见智的,因为有的启动盘会在启动时建立内存盘,并将command.com复制到内存盘上并修改comspec环境变量指向内存盘的command.com。所以,还是要具体情况具体分析。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
17 发表于 2007-12-23 23:00 ·  中国 山西 太原 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
还是要具体情况具体分析

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

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

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

[ Last edited by chenall on 2007-12-23 at 11:52 PM ]
QQ:366840202
http://chenall.net
19 发表于 2007-12-24 07:37 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
Originally posted by Climbing at 2007-12-23 21:19:


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

自己制作的启动盘里使用时没问题的,只要在autoexec的开头就把此参数赋予一个变量即可。
Windows 一键还原
http://www.yjhy.com
20 发表于 2007-12-24 23:53 ·  中国 山西 太原 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
文件标记也具有局限性
USB-FDD模式有可能读不到这个标记文件
USB-CD模式则可能在读无盘的真实光驱时卡壳
USB-HDD和USB-ZIP则无法避免这个异常
在只有C盘或A盘时再去判断另外一个盘上的文件
可能会因为设备未准备好而出现异常
21 发表于 2007-12-25 08:06 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
Originally posted by qzwqzw at 2007-12-24 23:53:
文件标记也具有局限性
USB-FDD模式有可能读不到这个标记文件
USB-CD模式则可能在读无盘的真实光驱时卡壳
USB-HDD和USB-ZIP则无法避免这个异常
在只有 ...


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

接下来准备在此基础上,加上第1硬盘是否只有一个分区的判断。
Windows 一键还原
http://www.yjhy.com
22 发表于 2007-12-25 10:50 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,284
发帖 538
注册 2002-11-02 00:00
23年会员
UID 129
性别 男
状态 离线
lianjiang2004 的文字表达不错,就是不给你结果,让你自己摸索、让你自己解决!
23 发表于 2007-12-26 10:22 ·  中国 四川 成都 电信
初级用户
积分 100
发帖 45
注册 2007-12-11 18:02
18年会员
UID 105341
性别 男
状态 离线
Originally posted by chishingchan at 2007-12-22 10:50 PM:


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

恢复:
ghost.exe -clone,mode=prestore,src=part2.gho,dst=1:2 -sure -rb


问题就在于dst这里,U盘在不同的机器上识别是不同的,有机器将其识别为硬盘,这样的话,就应是dst=2:1,而有的机器将其识别为软盘,这样就应是dst=1:1,所以需要知道当前盘符是A还是C,然后才能使用相应的参数的呀!
24 发表于 2007-12-26 10:30 ·  中国 四川 成都 电信
初级用户
积分 100
发帖 45
注册 2007-12-11 18:02
18年会员
UID 105341
性别 男
状态 离线
哈哈,看到我的帖子引得这么多讨论,真是高兴啊!可惜我是个菜鸟,好多都看得云里雾里,以后得多多努力了!
25 发表于 2007-12-26 14:16 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
Originally posted by chishingchan at 2007-12-25 10:50:
lianjiang2004 的文字表达不错,就是不给你结果,让你自己摸索、让你自己解决!


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

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

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

当然并不妨碍我根据自己的理解和经验,提出自己的看法供别人参考。
Windows 一键还原
http://www.yjhy.com
26 发表于 2007-12-26 15:16 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
我在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 发表于 2007-12-30 16:46 ·  中国 四川 成都 电信
初级用户
积分 100
发帖 45
注册 2007-12-11 18:02
18年会员
UID 105341
性别 男
状态 离线
今天无事看下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 发表于 2008-01-01 12:37 ·  中国 四川 成都 电信
初级用户
积分 100
发帖 45
注册 2007-12-11 18:02
18年会员
UID 105341
性别 男
状态 离线
受达人 qzwqzw 的启法,结合FOR命令,还有一种方法也可以得知U盘启动盘盘符:

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

这段码在CMD环境下测试通过,不晓得在纯DOS下可不可以!
29 发表于 2008-01-01 12:38 ·  中国 四川 成都 电信
初级用户
积分 100
发帖 45
注册 2007-12-11 18:02
18年会员
UID 105341
性别 男
状态 离线
而获取当前盘符则可以用以下这段代码:

for /f "delims=:\ tokens=1" %%i in ('CD') do set subdrive=%%i:
30 发表于 2008-01-01 13:25 ·  中国 四川 成都 电信
初级用户
积分 100
发帖 45
注册 2007-12-11 18:02
18年会员
UID 105341
性别 男
状态 离线
真郁闷死了,在纯DOS下居然不行!哎,可怜我的一腔激情啊!
论坛跳转: