![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-06 10:00 |
共 47,812 主题排行 / 349,914 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS启动盘 & LOGO技术 (启动盘室) » 活动主分区、最后分区号与盘符的确定批处理 |
| 可打印版本 4,054 / 21 |
| 第1楼 lianjiang2004 | 发表于 2007-05-09 07:51 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
活动主分区、最后分区号与盘符的确定批处理 活动主分区、最后分区号与盘符的确定批处理
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 ] |
|
| 第2楼 adiwdmd | 发表于 2007-05-10 09:13 |
| 初级用户 发帖 15 积分 50 | |
|
批处理有问题。
有没有考虑过分区数超过10个的情况? |
|
| 第3楼 lianjiang2004 | 发表于 2007-05-10 09:46 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
确实没有考虑这么多分区的问题。有缺陷。
谢谢指正。 [ Last edited by lianjiang2004 on 2007-5-10 at 10:08 AM ] |
|
| 第4楼 lianjiang2004 | 发表于 2007-05-10 09:53 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
需要处理10个分区的,稍微改一下一楼的批处理即可。
|
|
| 第5楼 lianjiang2004 | 发表于 2007-05-10 10:16 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
1楼的批处理已修改过,已能处理10个以上分区。
|
|
| 第6楼 terse | 发表于 2007-05-11 23:16 |
| 银牌会员 发帖 946 积分 2,404 | |
|
rem strings lines=add %lines%,1 这行的 rem 怎么没去掉?
|
|
| 第7楼 lianjiang2004 | 发表于 2007-05-12 08:11 |
| 金牌会员 发帖 1,884 积分 3,946 | |
Originally posted by terse at 2007-5-11 23:16: 这行不需要了。删除即可。 原来用了行数来判断结束,现在改成无数据为结束了。不再需要。 |
|
| 第8楼 terse | 发表于 2007-05-12 11:19 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by lianjiang2004 at 2007-5-12 08:11: RE:lianjiang2004 gdisk >%temp%\hdisk.ini type %temp%\hdisk.ini | lmod /L2* >%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 ] |
|
| 第9楼 lianjiang2004 | 发表于 2007-05-12 12:36 |
| 金牌会员 发帖 1,884 积分 3,946 | |
Originally posted by terse at 2007-5-12 11:19: 不好意思,我记得在修改支持10个以上分区时,修改了结束的判断条件,才发现1楼的没改。 即把 if %line%#==%lines%# goto mini_1 改成if %lined%#==# goto mini_1 |
|
| 第10楼 terse | 发表于 2007-05-12 13:11 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by lianjiang2004 at 2007-5-12 12:36: 呵呵~ 我不是这个意思, 我想请教的是: 如果不用strings lines=add %lines%,1 那么%lines%总会比实践行数少1; |
|
| 第11楼 lianjiang2004 | 发表于 2007-05-12 13:23 |
| 金牌会员 发帖 1,884 积分 3,946 | |
Originally posted by terse at 2007-5-12 13:11: 实际上行数并没少,这是由于判断条件的位置问题。 比如文件9行,8行处理完,就转回去,执行8+1,假如这时就判断行数是9就结束的话(即if %line%#==%lines%# goto mini_1),那么9行是不处理的,所以会少一行。 因此需要加上一行,就不会少了。 我现在不用行数判断,直接用读取的该行是否有数据来判断。没数据就结束。就不需要考虑加行数问题了。 |
|
| 第12楼 terse | 发表于 2007-05-12 14:23 |
| 银牌会员 发帖 946 积分 2,404 | |
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 |
|
| 第13楼 lianjiang2004 | 发表于 2007-05-12 14:49 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
把你的hdisk.txt文件格式贴出来看看。
另“type %temp%\hdisk.ini | lmod /L2* [3] ” 没用过,请教 lmod什么意思? |
|
| 第14楼 lianjiang2004 | 发表于 2007-05-12 15:25 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
用你的批处理试了一下,确实要少一行,2行的就显示1行,一个硬盘的话,不加1,就是0了。呵呵。
我的minito生成文件没事,能正常使用。看了gdisk生成文件与minito的文件差别是minito的文件后要多一空行。 |
|
| 第15楼 terse | 发表于 2007-05-12 15:35 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by lianjiang2004 at 2007-5-12 14:49: hdisk.txt就是硬盘信息 是GDISK的 hdisk.ini内容 : Disk Partitions Cylinders Heads Sectors Mbytes Model 1 6 9729 255 63 76319.1 UNKNOWN lmod /L2* ”处理后的hdisk.txt内容: 1 6 9729 255 63 76319.1 UNKNOWN lmod /L2* 就是从hdisk.ini文件第二排的第三字节写入hdisk.txt 我这样处理是因为如果有两个硬盘(尤其U盘被认第一硬盘) 就有个提示选择那个硬盘的 你上面的如果处理两个以上硬盘;可能就有出错的机会 [ Last edited by terse on 2007-5-12 at 03:43 PM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |