中国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] [4] »
作者:
标题: 如何根据盘符知道分区在硬盘中的位置? 上一主题 | 下一主题
fastslz
铂金会员

DOS一根葱


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

用80判断也是可行的,但是80分区可能有2个以上的,所以语法要复杂的多,另外一般有2个80都是高手所以一般情况他不需要别人的Ghost的。

[ Last edited by fastslz on 2006-7-20 at 16:46 ]

2006-7-20 16:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lc2000
初级用户





积分 36
发帖 14
注册 2006-7-19
状态 离线
『第 17 楼』:  

那么你给出的find命令DOS 7.1里有吗?

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

DOS一根葱


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

find是外部命令,如果是标准DOS 7.1应该有的
刚才我测试了一下80也会出现在最后一个盘的,下面给出80方法,双硬盘或有linux主分区可能会出现错误(即使错误src=1:1还是执行的)
@echo off
set area=1
GHOST -DD >NUL
find /i "1   80" GHSTSTAT.TXT
if not errorlevel 1 set area=2
find /i "2   80" GHSTSTAT.TXT
if not errorlevel 1 set area=3
find /i "3   80" GHSTSTAT.TXT
if not errorlevel 1 set area=4
find /i "4   80" GHSTSTAT.TXT
if not errorlevel 1 set area=5
find /i "5   80" GHSTSTAT.TXT
if not errorlevel 1 set area=6
find /i "6   80" GHSTSTAT.TXT
if not errorlevel 1 set area=7
find /i "7   80" GHSTSTAT.TXT
if not errorlevel 1 set area=8
find /i "8   80" GHSTSTAT.TXT
if not errorlevel 1 set area=9
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx

2006-7-20 19:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lc2000
初级用户





积分 36
发帖 14
注册 2006-7-19
状态 离线
『第 19 楼』:  

你说的双硬盘或有linux主分区这两种情况是不会出现的,呵呵。另外像这样的写法是不是8次find都会调用?如果是的话效率低了点,有没有像C语言一样break的方法?
另外find语句中要搜索的字符串"1   80"中间必须是3个空格吗?
还有一个潜在的问题是如果area=3成立的话,ghost命令会出错的,因为src不能与dst是相同的分区。
感谢一根葱大侠的赐教!

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

DOS一根葱


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

要提高效率find次数是可以跳过,"1   80"中间3个空格也属于字符串所以是必须的。
关于潜在的问题用GHOST无人参与备份方法也避免不了的,出现此情况的几率也可以忽略的,况且area=3情况并不多(即2个主引导分区),但是我们做批处理考虑兼容性也不能排除此情况的发生,假设某用户area=3那dst也绝对不是1:3:\,所以没有一个GHOST无人参与参数是完美的。

@echo off
GHOST -DD >NUL
find /i "0   80" GHSTSTAT.TXT
if not errorlevel 1 set area=1
if "%area%"=="1" goto gho
find /i "1   80" GHSTSTAT.TXT
if not errorlevel 1 set area=2
if "%area%"=="2" goto gho
find /i "2   80" GHSTSTAT.TXT
if not errorlevel 1 set area=3
if "%area%"=="3" goto gho
find /i "3   80" GHSTSTAT.TXT
if not errorlevel 1 set area=4
if "%area%"=="4" goto gho
find /i "4   80" GHSTSTAT.TXT
if not errorlevel 1 set area=5
if "%area%"=="5" goto gho
find /i "5   80" GHSTSTAT.TXT
if not errorlevel 1 set area=6
if "%area%"=="6" goto gho
find /i "6   80" GHSTSTAT.TXT
if not errorlevel 1 set area=7
if "%area%"=="7" goto gho
find /i "7   80" GHSTSTAT.TXT
if not errorlevel 1 set area=8
if "%area%"=="8" goto gho
find /i "8   80" GHSTSTAT.TXT
if not errorlevel 1 set area=9
:gho
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx

2006-7-21 13:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lc2000
初级用户





积分 36
发帖 14
注册 2006-7-19
状态 离线
『第 21 楼』:  

深表感谢,终于得到了一个比较完美的解决办法。

2006-7-21 16:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


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

如果GHOST不能自动跳过对隐藏首分区的判断,这个问题是很重要的,因为没有亲自看到过,也没办法做到实验,如果时机适合,一键GHOST的今后版本会考虑加入此功能.



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

DOS一根葱


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

我用真机状态试过的确实可行,用PQ分成3个主分区,即第一个主分区(隐藏的)第二个主分区(隐藏的)第五个主分区也是最后一个分区(活动的),此时出现4   80用上面的方法直接备份了第五个分区系统。
也就是说一键下去肯定是系统盘。如果双硬盘上面的方法确实有问题的。但是同样可以避免,如:先判断是否有双硬盘,是双硬盘跳过同时set area=设置成1,保持原来的功能。

2006-8-16 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 24 楼』:  

我刚写了迷你硬盘读写器,刚增加了支持扩展分区(这就支持全部分区了),也加了带各种选项的显示分区的功能,DOS盘号也标出来了
帖几个共参考:(各项名称暂没加上)

我共三个硬盘

一: 全部分区
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 2]       *2       0 00 01CE 07 01D2   20482875   20482875
[ 3]        3       1 00 01BE 07 01C2   40965813   20482812
[ 4]        4       1 00 01BE 07 01C2   61448688   20482812
[ 5]        5       1 00 01BE 07 01C2   81931563   20482812
[ 6]        6       1 00 01BE 07 01C2  102414438   20482812
[ 7]        7       1 00 01BE 07 01C2  122897313   16386237
[ 8]        8       1 00 01BE 07 01C2  139283613   20788047
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[10]        2       1 00 01BE 83 01C2    4498263   20081187
[11]        3       1 00 01BE 83 01C2   24579513     401562
[12]        4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[13]        5       1 00 01BE 83 01C2   26202078   13815837
[14]  3 >> *1       0 00 01BE 1B 01C2         63    8996337
[15]       *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[16]        3  5 G: 1 00 01BE 06 01C2   29479338    1381527

二: 显示 NTFS,FAT
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 2]       *2       0 00 01CE 07 01D2   20482875   20482875
[ 3]        3       1 00 01BE 07 01C2   40965813   20482812
[ 4]        4       1 00 01BE 07 01C2   61448688   20482812
[ 5]        5       1 00 01BE 07 01C2   81931563   20482812
[ 6]        6       1 00 01BE 07 01C2  102414438   20482812
[ 7]        7       1 00 01BE 07 01C2  122897313   16386237
[ 8]        8       1 00 01BE 07 01C2  139283613   20788047
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[10]  
[11]  
[12]        4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[13]  
[14]  3 >>
[15]       *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[16]        3  5 G: 1 00 01BE 06 01C2   29479338    1381527

三: 显示FAT
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 2]  
[ 3]  
[ 4]  
[ 5]  
[ 6]  
[ 7]  
[ 8]  
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[10]  
[11]  
[12]        4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[13]  
[14]  3 >>
[15]       *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[16]        3  5 G: 1 00 01BE 06 01C2   29479338    1381527

四:只显示DOS顺序的盘
[ 1]  1 >> *1  1 C: 0 80 01BE 0C 01C2         63   20482812
[ 9]  2 >> *1  2 D: 0 80 01BE 0B 01C2         63    4498137
[15]  3 >> *2  3 E: 0 80 01CE 0C 01D2    8996400   20482875
[12]  2 >>  4  4 F: 1 00 01BE 06 01C2   24981138    1220877
[16]  3 >>  3  5 G: 1 00 01BE 06 01C2   29479338    1381527


等等。。

另,只要,按规矩来 ,DOS盘符是有规律的,并且,每次启动都会按规律重排
WIN就乱了,盘号基本不变(当然可以在磁盘管理器中改。。)
WIN中的盘号记在注册表中的,别指望DOS程序知道你WIN的盘符(尽管有些DOS程序识别NTFS)

所以,最好记住物理盘序。。。

[ Last edited by GOTOmsdos on 2006-8-18 at 00:06 ]

2006-8-18 00:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 25 楼』:  

其实,分区这玩意儿,可以自己分的,只是最好要是一个CHS柱面的整数(就是到底)(否则,有些分区工具报错,不过也能用),自己算也行的,SPFDISK就是用柱面书来分区的,这样更直观,也使用户清楚了解分区的原理,否则,用户会觉得:分区的结果不于输入的完全一致,会奇怪。。

我前几天,买了新硬盘,没用分区工具分区,我用自己写的硬盘读写器把硬盘二的某一分区(包括MBR)弄到了新硬盘的第一分区,再把MBR的分区项改了,就能启动它了,本来是2个GB左右,后来我手工把他弄到增加一倍(把无用的第二FAT清零,再在DBR里,改大,就能用了)后来改成了4GB左右,在DOS下,实验正确的显示了改后的剩余空间,一切正常。。
(不过更好玩的是:在分区表里却仍然是2GB。  所以分区是可以自己控制调节的的,就象玩具。。这样才更有意思,别总是让只有什么魔术师才能魔术你的硬盘,自己也能魔的,不过,这需要你培养跟他的感情。。。)

[ Last edited by GOTOmsdos on 2006-8-18 at 00:33 ]

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

DOS一根葱


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

是的ghost -dd参数对盘符缺乏规律性
用迷你硬盘读写器是不是能定位某个分区的某个文件呢(文件名)比如:不管分区格式定位1号分区上是否有ntldr?这样就能判断系统所在分区了。

[ Last edited by fastslz on 2006-8-18 at 00:31 ]

2006-8-18 00:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 27 楼』:  

迷你硬盘读写器是以扇区的方式,不支持解析文件,但是 NTLDR的位置好象不能确定系统分区的吧?(所谓系统分区可能有好几个)
比如,我在几个盘都装了2K/XP,我要备份D盘的系统分区呢?

2006-8-18 00:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 28 楼』:  

我的思路是。我为什么一定要知道我要备份的盘是第几个盘呢。
原来我也觉得用 1:4 这种方法,硬盘分驱顺序固定有优点。但却和 WINDOWS 下的盘符不一定对的上。
那为什么不自己在 WINDOWS 下给硬盘打个标记呢。
在 WINDOWS 下首次运行程序,要求用户输入想备份的盘的盘符,然后我们去那盘上打个“备份标记”,再要求用户输入保存位置,我们再去打个“保存标记”。然后在 DOS 下去找标记,找到后不就能定准位了么。
假如用户要求改变备份盘和保存盘,那么再次运行 WINDOWS 下的程序,所以在程序开头先要把以前可能存在的“标记”先擦掉。
不知道我突然间想到的这个办法是否可行。 ^_^

2006-8-18 00:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 29 楼』:  

win 盘上打个“备份标记”, 能在DOS下识别吗?
就算LABEL法都不一定的,因为LABEL号实际上是个特殊的这个盘下的文件。。

2006-8-18 00:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 30 楼』:  

标记可以是生成个怪名字的文件或目录啊
在 DOS 下只要用 IF EXIST 就能判断在该盘有没有,如果有,在 FOR 语句中把盘号给变量。

2006-8-18 00:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: