中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 如何计算双硬盘每个硬盘的分区个数?
« [1] [2] [3] »
作者:
标题: 如何计算双硬盘每个硬盘的分区个数? 取消高亮 | 上一主题 | 下一主题
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『楼 主』:  如何计算双硬盘每个硬盘的分区个数?

如果,第一硬盘2个分区  第二硬盘为3个分区。那么就得到 2个 和 3个

要求 CMD 和 纯DOS  双解!



DOS之家 http://doshome.com 站长 葛明阳
2006-6-8 18:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 2 楼』:  

要求不明:
1.是只要显示还是要输出具体的数值?
2.是只考虑 FAT、NTFS 文件系统类型的分区还是所有分区都要考虑?

如果是这样的话,我看必须得靠编个具体程序来实现了。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-6-8 18:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 3 楼』:  

其实是这样的,在纯DOS批处理里:

GDISK 1 >1.txt
GDISK 2 >2.txt

通过对1.txt和2.txt的提取,可以做到。
但GDISK体积较大,我想用小程序(最好是DOS命令),不知能否做到?



DOS之家 http://doshome.com 站长 葛明阳
2006-6-9 00:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 4 楼』:  

我后来从网上找了个 GDISK,是1.0f-beta版的,不知道这是否是最新版的。我看了下,它计算分区数的时候把扩展分区也算在内了。一般的,我们只算实际有用的分区数,即主分区和扩展分区中的逻辑分区。比如,我有一个主分区,扩展分区中分了2个逻辑分区,我会说我一共分了3个区,而不会说4个。不知道你的要求是什么。另外,请给出具体的输出要求。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-6-9 13:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 5 楼』:  

GDISK我知道的是8.3最高版本,最好要一个小工具,几KB的。GDISK太大



DOS之家 http://doshome.com 站长 葛明阳
2006-6-9 17:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 6 楼』:  

请给出具体的输出要求。就是说,你要怎样的输出,是不是只要一个数字就行了。

另外,你的 GDISK 是哪里下载的?看来我找到的是很早以前的了:

  Quote:
(C) Copyright Binary Research, 1998. Version 1.0f-BETA.





DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-6-9 18:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





积分 3467
发帖 1616
注册 2004-6-21
状态 离线
『第 7 楼』:  



  Quote:
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。

2006-6-9 20:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  

不用Gdisk,用ghost就行,dos之家葛站长不会嫌弃ghost的个头吧:P

@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
disk1=1
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:2" >NUL
if not errorlevel 1 set disk1=2 goto 3
..............goto 1_1
:2_1
disk1=
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:1" >NUL
if not errorlevel 1 set  disk2=1 goto 2
:2_2
disk1=1
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   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 ]

2006-6-9 20:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  

不过如果判断1个硬盘上有是否存在9分区的话,这样要find 9X2=18次可苦了赛扬Ⅲ以下机子了!

2006-6-9 21:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 10 楼』:  

不好意思喝了酒有点迷惑

@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

2006-6-9 21:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 11 楼』:  

Re fastslz:

      你的代码还是存在问题,"if not errorlevel 1 set  disk1=1 goto 2",将导致disk1产生错误的值,而且CMD下应该使用 ghostpe 或ghost32的。

      另外,这个脚本可以使用for来简化,如果楼主有相关要求,我会抽时间编写一个,或者也可以参考一下论坛的旧主题,其中有不少是 讨论纯DOS下循环的实现的,可以选择按内容搜索关键字“:loop”。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-10 21:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ITU
中级用户





积分 209
发帖 82
注册 2006-3-22
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by gmy at 2006-6-9 17:05:
GDISK我知道的是8.3最高版本,最好要一个小工具,几KB的。GDISK太大

有同感!

2006-6-10 21:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 13 楼』:  

多谢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: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]   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[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

:FIND2
rem 判断是否存在硬盘2
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2" >NUL
if not errorlevel 1 goto 2_1

:end

[ Last edited by fastslz on 2006-6-11 at 00:22 ]

2006-6-11 00:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 14 楼』:  

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

  Quote:

  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:"磁盘 [0-9] "') 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:"分区 [0-9] "') 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 ]



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-6-11 02:32
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 15 楼』:  

fastslz的程序有点问题,会出错!下面是我的程序!
@echo off
ghost -dd >NUL
set disk1=
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:1" >NUL
if not errorlevel 1 set disk1=1
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:2" >NUL
if not errorlevel 1 set disk1=2
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:3" >NUL
if not errorlevel 1 set disk1=3
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:4" >NUL
if not errorlevel 1 set disk1=4
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:5" >NUL
if not errorlevel 1 set disk1=5
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:6" >NUL
if not errorlevel 1 set disk1=6
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:7" >NUL
if not errorlevel 1 set disk1=7
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:8" >NUL
if not errorlevel 1 set disk1=8
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:9" >NUL
if not errorlevel 1 set disk1=9
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   1:10" >NUL
if not errorlevel 1 set disk1=10
if not %disk1%#==# goto 1
goto 2
:1
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:1" >NUL
if not errorlevel 1 set disk2=1
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:2" >NUL
if not errorlevel 1 set disk2=2
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:3" >NUL
if not errorlevel 1 set disk2=3
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:4" >NUL
if not errorlevel 1 set disk2=4
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:5" >NUL
if not errorlevel 1 set disk2=5
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:6" >NUL
if not errorlevel 1 set disk2=6
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:7" >NUL
if not errorlevel 1 set disk2=7
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:8" >NUL
if not errorlevel 1 set disk2=8
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:9" >NUL
if not errorlevel 1 set disk2=9
TYPE GHSTSTAT.TXT|FIND /i "Key[1]   2:10" >NUL
:2
set disk

[ Last edited by qwe1234567 on 2006-6-11 at 09:46 ]



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-6-11 09:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: