|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『楼 主』:
活动主分区、最后分区号与盘符的确定批处理
活动主分区、最后分区号与盘符的确定批处理
ghost自动备份时,活动主分区、最后分区号与盘符的确定思路和批处理
使用了第三方软件minito(for dos)。
【说明,本人水平有限,相信有更好的处理办法。欢迎批评指正】
DOS下解决方案。
所需工具:minito,strings,ifs
一,思路
1,用minitow获得硬盘信息。
由于可能要在NTFS分区创建新目录,因此获取的是加载了ifs驱动后的dos下盘符。不创建目录的话,不需要确定最后分区对应的盘符。
示例如下
N:N : PRI/LOG ACT HIDE ID FILE SYSTEM LABEL TOTALmb FREEmb
1:1 = C: PRIMARY YES NO 0B FAT32 WINXP 7538 3619
1:2 = E: PRIMARY NO YES 17 NTFS/HPFS 7467
1:3 = F: LOGICAL NO NO 07 NTFS/HPFS 10001
1:4 = G: LOGICAL NO NO 07 NTFS/HPFS 15005
1:5 = D: LOGICAL NO NO 0B FAT32 APPZ 30004 17234
1:6 = H: LOGICAL NO NO 07 NTFS/HPFS 44453
2,对上面的信息进行处理,获得活动主分区,及最后分区和最后分区对应的盘符。
二,批处理。【已能处理10个以上分区的情况。】
@echo off
:BEGIN
set actp=
if exist mini_dd.txt del mini_dd.txt
minito /nohp /p /ifs>mini_dd.txt
rem 文件行数
strings lines=LINESIZE mini_dd.txt
if %lines%#==0# goto fail
rem strings lines=add %lines%,1
set line=1
echo 硬盘信息:
:mini
strings line=add %line%,1
rem if %line%#==%lines%# goto mini_1
strings lined=read mini_dd.txt,%line%
if %lined%#==# goto mini_1
strings row0=mid %lined%,4,1
if %row0%#==# goto mini_2
strings row1=left %lined%,4
goto mini_3
:mini_2
strings row1=left %lined%,3
:mini_3
strings row3=mid %lined%,8,2
strings row5=mid %lined%,19,3
if not %actp%#==# goto mini_4
if not %row5%#==YES# goto mini_4
set actp=%row1%
:mini_4
set lastp=%row1%
set lastd=%row3%
echo %lined%
goto mini
:mini_1
echo.
echo 请根据上面显示的硬盘信息确认识别结果。
echo.
echo 自动识别结果:
echo 活动分区是%actp%
echo 最后分区是%lastp%
echo 最后分区对应的盘符是%lastd%
echo.
pause
goto exit
:fail
cls
echo.
echo 很抱歉,本工具采用的软件未能获得有效硬盘信息。
echo.
pause
:exit
[ Last edited by lianjiang2004 on 2007-5-12 at 01:07 PM ]
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-9 07:51 |
|
|
adiwdmd
初级用户
积分 50
发帖 15
注册 2005-10-2
状态 离线
|
『第
2 楼』:
批处理有问题。
有没有考虑过分区数超过10个的情况?
|
|
2007-5-10 09:13 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
3 楼』:
确实没有考虑这么多分区的问题。有缺陷。
谢谢指正。
[ Last edited by lianjiang2004 on 2007-5-10 at 10:08 AM ]
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-10 09:46 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
|
2007-5-10 09:53 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
|
2007-5-10 10:16 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
6 楼』:
rem strings lines=add %lines%,1 这行的 rem 怎么没去掉?
|
|
2007-5-11 23:16 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
7 楼』:
Quote: | Originally posted by terse at 2007-5-11 23:16:
rem strings lines=add %lines%,1 这行的 rem 怎么没去掉? |
|
这行不需要了。删除即可。
原来用了行数来判断结束,现在改成无数据为结束了。不再需要。
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-12 08:11 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by lianjiang2004 at 2007-5-12 08:11:
这行不需要了。删除即可。
原来用了行数来判断结束,现在改成无数据为结束了。不再需要。 |
|
RE:lianjiang2004
gdisk >%temp%\hdisk.ini
type %temp%\hdisk.ini | lmod /L2* [3] >%temp%\hdisk.txt
strings hn=linesize %temp%\hdisk.txt
strings hn=add %hn%,1
%hn%硬盘数
难道是strings版本的问题!
我这里没strings hn=add %hn%,1这一步不行!
在单硬盘的时候 如去掉 strings hn=add %hn%,1 这行 %hn%=0
加上hn=add %hn%,1 这行 %hn%=1
你上面的:
strings lines=LINESIZE mini_dd.txt
if %lines%#==0# goto fail
rem strings lines=add %lines%,1
按我这里的情况不用 strings lines=add %lines%,1 应该处理不了最后一个分区吧?
[ Last edited by terse on 2007-5-12 at 11:21 AM ]
|
|
2007-5-12 11:19 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by terse at 2007-5-12 11:19:
RE:lianjiang2004
gdisk >%temp%\hdisk.ini
type %temp%\hdisk.ini | lmod /L2* [3] >%temp%\hdisk.txt
strings hn=linesize %temp%\hdisk.txt
strings hn=add %hn%,1
%hn%硬盘数
难道是st ... |
|
不好意思,我记得在修改支持10个以上分区时,修改了结束的判断条件,才发现1楼的没改。
即把 if %line%#==%lines%# goto mini_1
改成if %lined%#==# goto mini_1
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-12 12:36 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
10 楼』:
Quote: | Originally posted by lianjiang2004 at 2007-5-12 12:36:
不好意思,我记得在修改支持10个以上分区时,修改了结束的判断条件,才发现1楼的没改。
即把 if %line%#==%lines%# goto mini_1
改成if %lined%#==# goto mini_1 |
|
呵呵~
我不是这个意思,
我想请教的是: 如果不用strings lines=add %lines%,1 那么%lines%总会比实践行数少1;
|
|
2007-5-12 13:11 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
11 楼』:
Quote: | Originally posted by terse at 2007-5-12 13:11:
呵呵~
我不是这个意思,
我想请教的是: 如果不用strings lines=add %lines%,1 那么%lines%总会比实践行数少1; |
|
实际上行数并没少,这是由于判断条件的位置问题。
比如文件9行,8行处理完,就转回去,执行8+1,假如这时就判断行数是9就结束的话(即if %line%#==%lines%# goto mini_1),那么9行是不处理的,所以会少一行。
因此需要加上一行,就不会少了。
我现在不用行数判断,直接用读取的该行是否有数据来判断。没数据就结束。就不需要考虑加行数问题了。
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-12 13:23 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
12 楼』:
Quote: | Originally posted by lianjiang2004 at 2007-5-12 13:23:
实际上行数并没少,这是由于判断条件的位置问题。... |
|
我这里不是这样的!
strings hn=linesize %temp%\hdisk.txt
echo %hn%
hdisk.txt如果是一行的话,那%hn%怎么会是0
strings hn=linesize %temp%\hdisk.txt
strings hn=add %hn%,1
hdisk.txt同样一行 这样的话%hn%就会是1
|
|
2007-5-12 14:23 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
13 楼』:
把你的hdisk.txt文件格式贴出来看看。
另“type %temp%\hdisk.ini | lmod /L2* [3] ” 没用过,请教 lmod什么意思?
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-12 14:49 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
14 楼』:
用你的批处理试了一下,确实要少一行,2行的就显示1行,一个硬盘的话,不加1,就是0了。呵呵。
我的minito生成文件没事,能正常使用。看了gdisk生成文件与minito的文件差别是minito的文件后要多一空行。
|
Windows 一键还原
http://www.yjhy.com |
|
2007-5-12 15:25 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
15 楼』:
Quote: | Originally posted by lianjiang2004 at 2007-5-12 14:49:
把你的hdisk.txt文件格式贴出来看看。
另“type %temp%\hdisk.ini | lmod /L2* [3] ” 没用过,请教 lmod什么意思? |
|
hdisk.txt就是硬盘信息 是GDISK的
hdisk.ini内容 :
Disk Partitions Cylinders Heads Sectors Mbytes Model
1 6 9729 255 63 76319.1 UNKNOWN
lmod /L2* [3] ”处理后的hdisk.txt内容:
1 6 9729 255 63 76319.1 UNKNOWN
lmod /L2* [3]就是从hdisk.ini文件第二排的第三字节写入hdisk.txt
我这样处理是因为如果有两个硬盘(尤其U盘被认第一硬盘) 就有个提示选择那个硬盘的
你上面的如果处理两个以上硬盘;可能就有出错的机会
[ Last edited by terse on 2007-5-12 at 03:43 PM ]
|
|
2007-5-12 15:35 |
|