中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 请教,纯DOS下如何获取当前盘符?
« [1] [2] [3] »
作者:
标题: 请教,纯DOS下如何获取当前盘符? 上一主题 | 下一主题
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 16 楼』:  



  Quote:
Originally posted by qzwqzw at 2007-12-23 13:59:
获取U盘引导盘盘符的话
我用的是%comspec%变量

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

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



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-12-23 21:19
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 17 楼』:  



  Quote:
还是要具体情况具体分析

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

而为了兼容它人编写的批处理代码
我通常会在autoexec.bat中先检查A盘是否可读
如果不可读则subst a: c:\建立虚拟A盘
以兼容其它一些可能会读A盘的代码

2007-12-23 23:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 18 楼』:  

我觉得还是通过U盘里面的一个特殊文件来判断比较保险.
因为其它方法,都有N种可能.而用特殊文件,就不会.

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

[ Last edited by chenall on 2007-12-23 at 11:52 PM ]



QQ:366840202
http://chenall.net
2007-12-23 23:48
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 19 楼』:  



  Quote:
Originally posted by Climbing at 2007-12-23 21:19:


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

自己制作的启动盘里使用时没问题的,只要在autoexec的开头就把此参数赋予一个变量即可。



Windows 一键还原
http://www.yjhy.com
2007-12-24 07:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 20 楼』:  

文件标记也具有局限性
USB-FDD模式有可能读不到这个标记文件
USB-CD模式则可能在读无盘的真实光驱时卡壳
USB-HDD和USB-ZIP则无法避免这个异常
在只有C盘或A盘时再去判断另外一个盘上的文件
可能会因为设备未准备好而出现异常

2007-12-24 23:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 21 楼』:  



  Quote:
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
2007-12-25 08:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 22 楼』:  

lianjiang2004 的文字表达不错,就是不给你结果,让你自己摸索、让你自己解决!

2007-12-25 10:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 23 楼』:  



  Quote:
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,然后才能使用相应的参数的呀!

2007-12-26 10:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 24 楼』:  

哈哈,看到我的帖子引得这么多讨论,真是高兴啊!可惜我是个菜鸟,好多都看得云里雾里,以后得多多努力了!

2007-12-26 10:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 25 楼』:  



  Quote:
Originally posted by chishingchan at 2007-12-25 10:50:
lianjiang2004 的文字表达不错,就是不给你结果,让你自己摸索、让你自己解决!

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

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

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

当然并不妨碍我根据自己的理解和经验,提出自己的看法供别人参考。



Windows 一键还原
http://www.yjhy.com
2007-12-26 14:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 26 楼』:  

我在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 ]



简单!简单!再简单!
2007-12-26 15:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 27 楼』:  

今天无事看下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 ]

2007-12-30 16:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 28 楼』:  

受达人 qzwqzw 的启法,结合FOR命令,还有一种方法也可以得知U盘启动盘盘符:

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

这段码在CMD环境下测试通过,不晓得在纯DOS下可不可以!

2008-1-1 12:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 29 楼』:  

而获取当前盘符则可以用以下这段代码:

for /f "delims=:\ tokens=1" %%i in ('CD') do set subdrive=%%i:

2008-1-1 12:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logan0279
初级用户





积分 100
发帖 45
注册 2007-12-11
状态 离线
『第 30 楼』:  

真郁闷死了,在纯DOS下居然不行!哎,可怜我的一腔激情啊!

2008-1-1 13:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: