![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-28 13:23 |
共 47,815 主题排行 / 349,915 发帖 / 今日 1 篇 / 48,265 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » 如何计算双硬盘每个硬盘的分区个数? |
| 可打印版本 12,308 / 41 |
| 第1楼 gmy | 发表于 2006-06-08 18:06 |
| 版主 发帖 392 积分 1,113 | |
|
如何计算双硬盘每个硬盘的分区个数? 如果,第一硬盘2个分区 第二硬盘为3个分区。那么就得到 2个 和 3个
要求 CMD 和 纯DOS 双解! |
|
| 第2楼 DOSforever | 发表于 2006-06-08 18:26 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
要求不明:
1.是只要显示还是要输出具体的数值? 2.是只考虑 FAT、NTFS 文件系统类型的分区还是所有分区都要考虑? 如果是这样的话,我看必须得靠编个具体程序来实现了。 |
|
| 第3楼 gmy | 发表于 2006-06-09 00:39 |
| 版主 发帖 392 积分 1,113 | |
|
其实是这样的,在纯DOS批处理里:
GDISK 1 >1.txt GDISK 2 >2.txt 通过对1.txt和2.txt的提取,可以做到。 但GDISK体积较大,我想用小程序(最好是DOS命令),不知能否做到? |
|
| 第4楼 DOSforever | 发表于 2006-06-09 13:14 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
我后来从网上找了个 GDISK,是1.0f-beta版的,不知道这是否是最新版的。我看了下,它计算分区数的时候把扩展分区也算在内了。一般的,我们只算实际有用的分区数,即主分区和扩展分区中的逻辑分区。比如,我有一个主分区,扩展分区中分了2个逻辑分区,我会说我一共分了3个区,而不会说4个。不知道你的要求是什么。另外,请给出具体的输出要求。
|
|
| 第5楼 gmy | 发表于 2006-06-09 17:05 |
| 版主 发帖 392 积分 1,113 | |
|
GDISK我知道的是8.3最高版本,最好要一个小工具,几KB的。GDISK太大
|
|
| 第6楼 DOSforever | 发表于 2006-06-09 18:13 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
请给出具体的输出要求。就是说,你要怎样的输出,是不是只要一个数字就行了。
另外,你的 GDISK 是哪里下载的?看来我找到的是很早以前的了: (C) Copyright Binary Research, 1998. Version 1.0f-BETA. |
|
| 第7楼 fujianabc | 发表于 2006-06-09 20:37 |
| 金牌会员 发帖 1,616 积分 3,467 | |
Originally posted by DOSforever at 2006-6-9 06:13 PM: 太强了,你找到了一个远古版的gdisk,居然还是属于Binary Research公司的版本。 gdisk是ghost软件的一个程序。ghost最早是Binary Research开发的,五个字母是该软件全名(忘了叫什么了)的英文首字母缩写。后来symantec收购了ghost,从此才有norton ghost和symantec ghost。 |
|
| 第8楼 fastslz | 发表于 2006-06-09 20:58 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
不用Gdisk,用ghost就行,dos之家葛站长不会嫌弃ghost的个头吧:P
@echo off ghost -dd >NUL :1 disk1= TYPE GHSTSTAT.TXT|FIND /i "Key 1:1" >NUL if not errorlevel 1 set disk1=1 goto 2 :2 disk1=1 TYPE GHSTSTAT.TXT|FIND /i "Key 1:2" >NUL if not errorlevel 1 set disk1=2 goto 3 ..............goto 1_1 :2_1 disk1= TYPE GHSTSTAT.TXT|FIND /i "Key 2:1" >NUL if not errorlevel 1 set disk2=1 goto 2 :2_2 disk1=1 TYPE GHSTSTAT.TXT|FIND /i "Key 2:2" >NUL if not errorlevel 1 set disk2=2 goto 3 ................goto end [ Last edited by fastslz on 2006-6-9 at 21:00 ] |
|
| 第9楼 fastslz | 发表于 2006-06-09 21:08 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
不过如果判断1个硬盘上有是否存在9分区的话,这样要find 9X2=18次可苦了赛扬Ⅲ以下机子了!
|
|
| 第10楼 fastslz | 发表于 2006-06-09 21:24 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
不好意思喝了酒有点迷惑
@echo off ghost -dd >NUL :1 disk1= TYPE GHSTSTAT.TXT|FIND /i "Key[1] 1:1" >NUL if not errorlevel 1 set disk1=1 goto 2 :2 IF "%disk1%"=="1" goto end disk1= TYPE GHSTSTAT.TXT|FIND /i "Key[1] 1:2" >NUL if not errorlevel 1 set disk1=2 goto 3 :3 IF "%disk1%"=="2" goto end ..............goto 2_1 :2_1 disk2= TYPE GHSTSTAT.TXT|FIND /i "Key[1] 2:1" >NUL if not errorlevel 1 set disk2=1 goto 2 :2_2 IF "%disk2%"=="1" goto end disk2= TYPE GHSTSTAT.TXT|FIND /i "Key[1] 2:2" >NUL if not errorlevel 1 set disk2=2 goto 2_3 :2_3 IF "%disk2%"=="2" goto end ................goto end |
|
| 第11楼 willsort | 发表于 2006-06-10 21:39 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re fastslz:
你的代码还是存在问题,"if not errorlevel 1 set disk1=1 goto 2",将导致disk1产生错误的值,而且CMD下应该使用 ghostpe 或ghost32的。 另外,这个脚本可以使用for来简化,如果楼主有相关要求,我会抽时间编写一个,或者也可以参考一下论坛的旧主题,其中有不少是 讨论纯DOS下循环的实现的,可以选择按内容搜索关键字“:loop”。 |
|
| 第12楼 ITU | 发表于 2006-06-10 21:49 |
| 中级用户 发帖 82 积分 209 | |
Originally posted by gmy at 2006-6-9 17:05: 有同感! |
|
| 第13楼 fastslz | 发表于 2006-06-11 00:18 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
多谢willsort指导
本人6年前开始接触DOS一直在黑屏幕上摸索所以对cmd命令太生疏,甚至忽略了cmd命令存在,干脆批处理dos、cmd通用,来这以前也没泡论坛的习惯,现在有机会该多学习学习cmd了。不过32位和16位程序还是区分开的 用for简化在这之前想到过,假设某disk1可能有9个盘,那用find判断9次处理时间过长,而上面的方法如果disk1=2即goto end了,不知道我的思路是否正确。 至于用disk1=1、goto 2 方便标记,实际应用会注意的谢谢提醒 现在还发现上面有错误disk1=2时应该继续判断disk2=?而不是goto end @echo off ghost -dd >NUL :1 disk1= TYPE GHSTSTAT.TXT|FIND /i "Key 1:1" >NUL if not errorlevel 1 set disk1=1 goto 2 :2 IF "%disk1%"=="1" goto FIND2 disk1= TYPE GHSTSTAT.TXT|FIND /i "Key 1:2" >NUL if not errorlevel 1 set disk1=2 goto 3 :3 IF "%disk1%"=="2" goto FIND2 ..............goto FIND2 :2_1 disk2= TYPE GHSTSTAT.TXT|FIND /i "Key 2:1" >NUL if not errorlevel 1 set disk2=1 goto 2 :2_2 IF "%disk2%"=="1" goto end disk2= TYPE GHSTSTAT.TXT|FIND /i "Key 2:2" >NUL if not errorlevel 1 set disk2=2 goto 2_3 :2_3 IF "%disk2%"=="2" goto end ................goto end :FIND2 rem 判断是否存在硬盘2 TYPE GHSTSTAT.TXT|FIND /i "Key 2" >NUL if not errorlevel 1 goto 2_1 :end [ Last edited by fastslz on 2006-6-11 at 00:22 ] |
|
| 第14楼 无奈何 | 发表于 2006-06-11 02:32 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
写了个 CMD 下的方案,没有使用第三方工具。脚本不限制磁盘的个数,可惜我只有两个磁盘,没法作更多磁盘的测试。已知的问题:如果像我的硬盘一样状况不好的话可能执行较慢,但不能完全归结于脚本的效率问题。
[ Last edited by 无奈何 on 2006-6-11 at 02:42 ] |
|
| 第15楼 不得不爱 | 发表于 2006-06-11 09:44 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
fastslz的程序有点问题,会出错!下面是我的程序!
@echo off ghost -dd >NUL set disk1= TYPE GHSTSTAT.TXT|FIND /i "Key 1:1" >NUL if not errorlevel 1 set disk1=1 TYPE GHSTSTAT.TXT|FIND /i "Key 1:2" >NUL if not errorlevel 1 set disk1=2 TYPE GHSTSTAT.TXT|FIND /i "Key 1:3" >NUL if not errorlevel 1 set disk1=3 TYPE GHSTSTAT.TXT|FIND /i "Key 1:4" >NUL if not errorlevel 1 set disk1=4 TYPE GHSTSTAT.TXT|FIND /i "Key 1:5" >NUL if not errorlevel 1 set disk1=5 TYPE GHSTSTAT.TXT|FIND /i "Key 1:6" >NUL if not errorlevel 1 set disk1=6 TYPE GHSTSTAT.TXT|FIND /i "Key 1:7" >NUL if not errorlevel 1 set disk1=7 TYPE GHSTSTAT.TXT|FIND /i "Key 1:8" >NUL if not errorlevel 1 set disk1=8 TYPE GHSTSTAT.TXT|FIND /i "Key 1:9" >NUL if not errorlevel 1 set disk1=9 TYPE GHSTSTAT.TXT|FIND /i "Key 1:10" >NUL if not errorlevel 1 set disk1=10 if not %disk1%#==# goto 1 goto 2 :1 TYPE GHSTSTAT.TXT|FIND /i "Key 2:1" >NUL if not errorlevel 1 set disk2=1 TYPE GHSTSTAT.TXT|FIND /i "Key 2:2" >NUL if not errorlevel 1 set disk2=2 TYPE GHSTSTAT.TXT|FIND /i "Key 2:3" >NUL if not errorlevel 1 set disk2=3 TYPE GHSTSTAT.TXT|FIND /i "Key 2:4" >NUL if not errorlevel 1 set disk2=4 TYPE GHSTSTAT.TXT|FIND /i "Key 2:5" >NUL if not errorlevel 1 set disk2=5 TYPE GHSTSTAT.TXT|FIND /i "Key 2:6" >NUL if not errorlevel 1 set disk2=6 TYPE GHSTSTAT.TXT|FIND /i "Key 2:7" >NUL if not errorlevel 1 set disk2=7 TYPE GHSTSTAT.TXT|FIND /i "Key 2:8" >NUL if not errorlevel 1 set disk2=8 TYPE GHSTSTAT.TXT|FIND /i "Key 2:9" >NUL if not errorlevel 1 set disk2=9 TYPE GHSTSTAT.TXT|FIND /i "Key 2:10" >NUL :2 set disk [ Last edited by qwe1234567 on 2006-6-11 at 09:46 ] |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |