中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS启动盘 & LOGO技术 (启动盘室) » 活动主分区、最后分区号与盘符的确定批处理
« [1] [2] »
作者:
标题: 活动主分区、最后分区号与盘符的确定批处理 上一主题 | 下一主题
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
状态 离线
『第 4 楼』:  

需要处理10个分区的,稍微改一下一楼的批处理即可。



Windows 一键还原
http://www.yjhy.com
2007-5-10 09:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 5 楼』:  

1楼的批处理已修改过,已能处理10个以上分区。



Windows 一键还原
http://www.yjhy.com
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: