|
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
状态 离线
|
|
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
状态 离线
|
|
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
状态 离线
|
|
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: |
- :: 显示磁盘分区数
- :: 无奈何@cn-dos.net - 2006-06-11 - CMDWinXP
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- rem 获取磁盘信息
- for /f "tokens=1,2 delims= " %%a in ('echo list disk ^|diskpart ^|findstr /r /c:"磁盘 [0-9] "') do (
- @echo select disk=%%b>%%b.script
- @echo list partition>>%%b.script
- @echo exit>>%%b.script
- rem 执行脚本,获取磁盘分区信息
- for /f "tokens=1,2 delims= " %%m in ('diskpart /s %%b.script ^|findstr /r /c:"分区 [0-9] "') do (
- rem 减去扩展的分区数
- set /a num=%%n-1
- )
- del %%b.script
- echo 磁盘 %%b 含有 !num! 个分区
- )
-=代码着色 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 |
|
|
不得不爱
超级版主
我爱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 |
|