中国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] [4] [5] »
作者:
标题: [已解决]如何正确的获得纯DOS下的最后分区盘符? 上一主题 | 下一主题
chishingchan
银牌会员




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『楼 主』:  [已解决]如何正确的获得纯DOS下的最后分区盘符?

:: 检测硬盘最后分区盘符
@echo off
for /f %%a in ('"wmic logicaldisk where DriveType="3" get DeviceID |find /v "DeviceID""') do set lastdrive=%%a
echo CMD 下最后分区盘符是 %lastdrive%。
pause


  Quote:
Partition  Status   Type     Volume Label   Mbytes   System   Usage
C:  1        A    PRIMARY                 20402.8  FAT32      13%
     2             EXTENDED               135925.0             87%
D:  3             LOGICAL                 20402.8  NTFS      13%
E:  4             LOGICAL                 20402.8  FAT32      13%
F:  5             LOGICAL                 45896.6  FAT32      29%
G:  6             LOGICAL                 45896.6  FAT32      29%
H:  7             LOGICAL                  3325.9  NTFS       2%

在不区分NTFS格式的情况下,(CMD环境)以上代码会返回值为(H:)
如何将%lastdrive%值可以应用在纯DOS(不加载NTFS驱动)下?

  Quote:
C:=C:
E:=D:
F:=E:
G:=F:

在单硬盘的情况下,请高手帮忙在CMD环境下运行批处理后显示:(请具有通用性,不限此硬盘)
CMD 下最后分区盘符是 H:
DOS 下最后分区盘符是 F:

总结代码在41楼

[ Last edited by chishingchan on 2008-4-10 at 10:03 PM ]

2007-12-21 18:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


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

基本上比较麻烦,如果只有一个主分区还好处理,如果用户有多个主分区,那将会极大增加复杂度。



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




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



  Quote:
Originally posted by Climbing at 2007-12-21 10:34 PM:
基本上比较麻烦,如果只有一个主分区还好处理,如果用户有多个主分区,那将会极大增加复杂度。

那就算是一个主分区、一个扩展分区下分若干逻辑分区的情况来解答一下吧!

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

天的白色影子


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

DOS命令行下识别分区通常都是直接取gdisk或者ghost /d的输出的

如果能给最后的分区设上标记的话
工作将会比较简单
否则处理量会比较大一点

我见过的代码大部分都是加在指定分区加标记文件
当然以前也做过标记卷标的讨论

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




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


wmic logicaldisk where "DriveType=3" get DeviceID,FileSystem
因我我对FOR命令用得不怎么熟,上面这行应该可以实现:查找FAT32字符,从C:起开始按个数分配,例如:有3个FAT32的就确定为C:D:E:,即DOS最后的盘符为E:,熟悉FOR的朋友能否帮忙列出完整的批处理?

其实只查找 FAT 的字符就等于包含了 DOS 所认的盘符了。

[ Last edited by chishingchan on 2007-12-22 at 12:15 AM ]

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




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

帮忙一下吧!在线等。。。

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





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

理解错误,不好意思。

[ Last edited by lianjiang2004 on 2007-12-22 at 05:13 PM ]



Windows 一键还原
http://www.yjhy.com
2007-12-22 08:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





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

理解错误,不好意思。呵呵。

[ Last edited by lianjiang2004 on 2007-12-24 at 08:03 AM ]



Windows 一键还原
http://www.yjhy.com
2007-12-22 08:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


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

@lianjiang:

你的批处理是运行在纯DOS环境下的,这不符合楼主提出的在cmd下运行的要求。

下面是我的解决方案:

gdisk32 | find /c /i "fat"

看一下这个结果,根据结果数字很容易得出最后分区在DOS下的盘符:
c:  d:  e:  f:  g:  ...
1   2   3   4  5 ...



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





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



  Quote:
Originally posted by Climbing at 2007-12-22 08:44:
@lianjiang:

你的批处理是运行在纯DOS环境下的,这不符合楼主提出的在cmd下运行的要求。

下面是我的解决方案:

gdisk32 | find /c /i "fat"

看 ...

如何正确的获得纯DOS下的最后分区盘符?
要的是纯dos下的吧?



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




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



  Quote:
Originally posted by Climbing at 2007-12-22 08:44 AM:
@lianjiang:

你的批处理是运行在纯DOS环境下的,这不符合楼主提出的在cmd下运行的要求。

下面是我的解决方案:

gdisk32 | find /c /i "fat"

说的没错!是在CMD下得到DOS下的最后盘符。

gdisk32 | find /c /i "fat" 得到的结果是 0
我想是漏了个1吧!?
gdisk32 1 | find /c /i "fat" 在我的电脑上得到的结果是 6,因为我的分区全是FAT32的,顶楼是为例改成NTFS的。

GDISK32容量太大了,能否使用XP自带的命令处理?能否列出完整的批处理?

2007-12-22 10:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chishingchan
银牌会员




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

7楼仁兄用了几个外部程序及一个过渡文件,觉得不够理想。在经典代码里找出以下查看硬盘信息的一段批处理:
@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%a in ('fsutil fsinfo drives^|find /v ""') do (
    set aa=%%a
    set aa=!aa:~-2!
    for %%i in (!aa!) do fsutil fsinfo drivetype %%i
)
pause
能否结合
wmic logicaldisk where "DriveType=3" get DeviceID,FileSystem
得到我想要的结果?

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





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

理解错误,删除。

[ Last edited by lianjiang2004 on 2007-12-24 at 08:03 AM ]



Windows 一键还原
http://www.yjhy.com
2007-12-22 11:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





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

当然各人的用途不同,处理思路肯定也不一样。



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




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



  Quote:
Originally posted by lianjiang2004 at 2007-12-22 11:17 AM:
CMD下运行结果,与dos下是否一定一样?
windows下所谓的盘符错乱,不知会不会影响结果。
个人以为可靠的还是dos下直接获取。

单硬盘的话出现盘符错乱的结果一般很少,犹其是我所说的一主一扩几逻辑的分区方式。

CMD环境下的硬盘处理的自带命令行工具非常丰富,且无必要到DOS下的话就尽量避免。谢谢你的解答!

你说每个人的意愿都不同的,希望你能帮助我如题的解答。

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


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



论坛跳转: