中国DOS联盟论坛

中国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 是哪里下载的?看来我找到的是很早以前的了:

太强了,你找到了一个远古版的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:
GDISK我知道的是8.3最高版本,最好要一个小工具,几KB的。GDISK太大



有同感!
第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 下的方案,没有使用第三方工具。脚本不限制磁盘的个数,可惜我只有两个磁盘,没法作更多磁盘的测试。已知的问题:如果像我的硬盘一样状况不好的话可能执行较慢,但不能完全归结于脚本的效率问题。


  1. :: 显示磁盘分区数
  2. :: 无奈何@cn-dos.net - 2006-06-11 - CMDWinXP
  3. @echo off
  4. setlocal ENABLEDELAYEDEXPANSION
  5. rem 获取磁盘信息
  6. for /f "tokens=1,2 delims= " %%a in ('echo list disk ^|diskpart ^|findstr /r /c:"磁盘 "') do (
  7. @echo select disk=%%b>%%b.script
  8. @echo list partition>>%%b.script
  9. @echo exit>>%%b.script
  10. rem 执行脚本,获取磁盘分区信息
  11. for /f "tokens=1,2 delims= " %%m in ('diskpart /s %%b.script ^|findstr /r /c:"分区 "') do (
  12. rem 减去扩展的分区数
  13. set /a num=%%n-1
  14. )
  15. del %%b.script
  16. echo 磁盘 %%b 含有 !num! 个分区
  17. )
-=代码着色 BY:无奈何=-


[ 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