中国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
状态 离线
『第 31 楼』:  

系统盘为: D:, 分区号为: 3, 镜像占用约为: 454 MB.
备份盘为: H: (DOS:H:), 分区号为: 6, 剩余空间约为: 1284 MB.

分区号为:3 这个应该是2吧!我的硬盘分区没有NTFS格式的,不知如何测试?且我不需要这么多的结果,只需知道最后盘符就行。

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





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

仅是个人的一点经验,仅供参考。

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



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




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

有进展了,qzwqzw 的例子修改如下:
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=1" %%i in ('wmic logicaldisk where "drivetype=3" get FileSystem') do (
    set filesystem=%%i
    if "!filesystem:~0,3!"=="FAT" set /a id+=1
)
echo %id%
set Drive=CDEFGHIJKLMNOPQRSTUVWXYZ
set lastdrive=!Drive:~%id%,1!:
echo %lastdrive%
pause
返回值与目标不符!
返回值 ID=6
目标盘符 =I: (这里应该是H:才对)

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




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

现在唯有将
set Drive=CDEFGHIJKLMNOPQRSTUVWXYZ
修改为(=号后加空格)
set Drive= CDEFGHIJKLMNOPQRSTUVWXYZ
这样才对。

谁能帮忙解答为什么会出现这种情况?
谁能再为上面的代码精简一下?

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

天的白色影子


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


@echo off & setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for /f %%i in ('wmic logicaldisk get FileSystem ^| find /c "FAT"') do set lastdrive=!drives:~%%i,1!
echo 在纯DOS下最后一个可识别的硬盘分区的盘符为:%lastdrive%
这是专为你的应用精简的代码
但是我感觉这个方案如果用于系统备份分区的选择考虑很不周全

不知你是否考虑过分区的剩余空间是否满足要求
以及USB-HDD引导后盘符发生移位的可能

至于我的上一段代码的问题可能源于你的WMIC的输出比较特殊
如果有兴趣的话可以单独将WMIC的输出结果贴上来看看

你的修改代码返回值不符的问题在于你没有完全理解 set 的取子串规则
set 取字串的下标是从0算起的
也就是说~0代表第一个字符,~1代表第二个字符

[ Last edited by qzwqzw on 2007-12-23 at 01:55 PM ]

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




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

谢谢!算作解决了。

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





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

通用性很怀疑。呵呵。



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




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



  Quote:
Originally posted by lianjiang2004 at 2007-12-23 04:14 PM:
通用性很怀疑。呵呵。

你的技术也值得怀疑啊!:D 说了这么多对我的问题一点也帮不上忙。

说笑!别见怪!

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




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

正所谓一样通百样明,不完善的地方我会慢慢地去处理的。
qzwqzw 对此帮忙功不可没,衷心感谢。犹其是30楼的代码,以后还有参考的地方。

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




积分 1282
发帖 538
注册 2002-11-2
状态 离线
『第 40 楼』:  选择优化方案

以下是 35 楼发贴我想的精简方案:
@echo off
setlocal EnableDelayedexpansion
for /f "tokens=1" %%i in ('wmic logicaldisk where "drivetype=3" get FileSystem ^|findstr "FAT"') do set /a id+=1
set Drive= CDEFGHIJKLMNOPQRSTUVWXYZ
set lastdrive=!Drive:~%id%,1!:
echo %lastdrive%
pause>nul
以下是 35 楼的精简方案:
@echo off & setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for /f %%i in ('wmic logicaldisk get FileSystem ^| find /c "FAT"') do set lastdrive=!drives:~%%i,1!
echo 在纯DOS下最后一个可识别的硬盘分区的盘符为:%lastdrive%
虽然我的精简方案比较长,35 楼的方案精简,运行后大家估计会如何?

1、我的显示速度快,35 楼的比较慢;
2、我的运行很安静,35 楼的会响一声(读软驱)。

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




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

最后总结
@echo off
setlocal EnableDelayedExpansion
set drives= CDEFGHIJKLMNOPQRSTUVWXYZ
for /f %%i in ('wmic logicaldisk where "drivetype=3" get FileSystem ^| find /c "FAT"') do set lastdrive=!drives:~%%i,1!:
echo %lastdrive%
pause>nul


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





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

这里高手如云,关于你要的windows下获取盘符的办法,我就没有发言的资格了。
不过,我想,在前面几楼里,指出的需要注意的几个问题,难道对你没益处吗?

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



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

网络独行侠


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

是啊,这种方案只能针对一个硬盘主分区的情况,如果有多个主分区,就完全不适用,还是ghost的1:x指定分区的方式比较稳定可靠。gghost好象就使用了这种方案。



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





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

限于水平,很遗憾没能直接帮上你的忙,希望指出的一些其它问题,也能引起你的足够重视。

[ Last edited by lianjiang2004 on 2007-12-24 at 07:59 AM ]



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




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

在这里隆重的热烈的谢谢 lianjiang2004
确实获益非浅。

复43楼:这个是我帮人家装机时用的,一般处理如下:
1、在需要重装的电脑上备份驱动到U盘
2、带DOS启动的XPSP2安装盘一张:分区(SPFDISK.EXE)、传送DOS系统(SYS.COM)、光盘方式安装XPSP2(自制精简版)
3、第二次启动时备份一次(无驱动备份)
4、安装驱动
5、运行自制程序:服务优化、文件夹转移、影子系统、恢复软件、DOS文件
6、再次备份一次系统(带驱动备份)
7、安装常用软件
8、最后再备份一次系统
注:因使用精简版,所以精简的系统也就 2?? MB
最后备份的一般也超不过 1 G

各位看上面就知道,本人全程监控的,还需检测容量、分区错乱等等的必要吗?

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


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



论坛跳转: