[ Last edited by fastslz on 2006-7-20 at 14:52 ]作者: lc2000 时间: 2006-7-20 15:36 ghost -dd生成的文件,dell保留分区的卷标应该是DellUtility。但是DELL的这个分区以后新机型有可能会变化啊。我的目的是找到操作系统所在分区的位置,这个文本里已经体现了,那个80的就应该表示是系统盘,我就是不知道怎么用DOS批处理写出来。
刚才给DELL打了电话,他们说这个保留的64M隐藏分区没什么用处,可以删除。但是我觉得还是应该把ghost命令写成活得,这才是程序员应该做的事情,如果写成1:1,以后又碰到别的品牌机器又怎么办呢,所以这个问题还是要解决的。
作者: fastslz 时间: 2006-7-20 15:53 @echo off
set area=1
GHOST -DD >NUL
find /i "DellUtility" GHSTSTAT.TXT
if not errorlevel 1 set area=2
ghost -clone,mode=pdump,src=1:%area%,dst=1:3:\backup.gho -z2 -auto -sure -fx
这样就ok了,如备份dell机自动转换src=1:2,普通机还是src=1:1作者: lc2000 时间: 2006-7-20 15:58 楼上的高手,如果以后DELL机的这个卷标发生变化了呢,我觉得最好是根据
# Ord Boot Id Ext First Num Last Used NTFS
0 0 0 de No 63 128457 128520 0 No
1 1 80 7 No 128520 20964825 21093345 0 No
2 2 0 7 Yes 21093408 62910477 84003885 0 No
3 3 0 7 Yes 84003948 72228177 156232125 0 No
这块,如果发现BOOT为80则是操作系统分区,位置是Ord+1,这个有办法用DOS命令实现吗?作者: lc2000 时间: 2006-7-20 16:00 楼上的高手,如果以后DELL机的这个卷标发生变化了呢,我觉得最好是根据
# Ord Boot Id Ext First Num Last Used NTFS
0 0 0 de No 63 128457 128520 0 No
1 1 80 7 No 128520 20964825 21093345 0 No
2 2 0 7 Yes 21093408 62910477 84003885 0 No
3 3 0 7 Yes 84003948 72228177 156232125 0 No
这块,如果发现BOOT为80则是操作系统分区,位置是Ord+1,这个有办法用DOS命令实现吗?作者: fastslz 时间: 2006-7-20 16:02 哦.、忘了说,注意一下GHSTSTAT.TXT路径哦
即使用GHOST -DD >A:\GHSTSTAT.TXT命令也无效作者: fastslz 时间: 2006-7-20 16:18 用80判断也是可行的,但是80分区可能有2个以上的,所以语法要复杂的多,另外一般有2个80都是高手所以一般情况他不需要别人的Ghost的。
[ Last edited by fastslz on 2006-7-20 at 16:46 ]作者: lc2000 时间: 2006-7-20 19:17 那么你给出的find命令DOS 7.1里有吗?作者: fastslz 时间: 2006-7-20 19:55 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作者: lc2000 时间: 2006-7-20 22:24 你说的双硬盘或有linux主分区这两种情况是不会出现的,呵呵。另外像这样的写法是不是8次find都会调用?如果是的话效率低了点,有没有像C语言一样break的方法?
另外find语句中要搜索的字符串"1 80"中间必须是3个空格吗?
还有一个潜在的问题是如果area=3成立的话,ghost命令会出错的,因为src不能与dst是相同的分区。
感谢一根葱大侠的赐教!作者: fastslz 时间: 2006-7-21 13:50 要提高效率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作者: lc2000 时间: 2006-7-21 16:58 深表感谢,终于得到了一个比较完美的解决办法。作者: gmy 时间: 2006-8-16 21:55 如果GHOST不能自动跳过对隐藏首分区的判断,这个问题是很重要的,因为没有亲自看到过,也没办法做到实验,如果时机适合,一键GHOST的今后版本会考虑加入此功能.作者: fastslz 时间: 2006-8-16 22:18 我用真机状态试过的确实可行,用PQ分成3个主分区,即第一个主分区(隐藏的)第二个主分区(隐藏的)第五个主分区也是最后一个分区(活动的),此时出现4 80用上面的方法直接备份了第五个分区系统。
也就是说一键下去肯定是系统盘。如果双硬盘上面的方法确实有问题的。但是同样可以避免,如:先判断是否有双硬盘,是双硬盘跳过同时set area=设置成1,保持原来的功能。作者: GOTOmsdos 时间: 2006-8-18 00:03 我刚写了迷你硬盘读写器,刚增加了支持扩展分区(这就支持全部分区了),也加了带各种选项的显示分区的功能,DOS盘号也标出来了
帖几个共参考:(各项名称暂没加上)
[ Last edited by GOTOmsdos on 2006-8-18 at 00:06 ]作者: GOTOmsdos 时间: 2006-8-18 00:21 其实,分区这玩意儿,可以自己分的,只是最好要是一个CHS柱面的整数(就是到底)(否则,有些分区工具报错,不过也能用),自己算也行的,SPFDISK就是用柱面书来分区的,这样更直观,也使用户清楚了解分区的原理,否则,用户会觉得:分区的结果不于输入的完全一致,会奇怪。。
[ Last edited by GOTOmsdos on 2006-8-18 at 00:33 ]作者: fastslz 时间: 2006-8-18 00:28 是的ghost -dd参数对盘符缺乏规律性
用迷你硬盘读写器是不是能定位某个分区的某个文件呢(文件名)比如:不管分区格式定位1号分区上是否有ntldr?这样就能判断系统所在分区了。
[ Last edited by fastslz on 2006-8-18 at 00:31 ]作者: GOTOmsdos 时间: 2006-8-18 00:42 迷你硬盘读写器是以扇区的方式,不支持解析文件,但是 NTLDR的位置好象不能确定系统分区的吧?(所谓系统分区可能有好几个)
比如,我在几个盘都装了2K/XP,我要备份D盘的系统分区呢?作者: NaturalJ0 时间: 2006-8-18 00:44 我的思路是。我为什么一定要知道我要备份的盘是第几个盘呢。
原来我也觉得用 1:4 这种方法,硬盘分驱顺序固定有优点。但却和 WINDOWS 下的盘符不一定对的上。
那为什么不自己在 WINDOWS 下给硬盘打个标记呢。
在 WINDOWS 下首次运行程序,要求用户输入想备份的盘的盘符,然后我们去那盘上打个“备份标记”,再要求用户输入保存位置,我们再去打个“保存标记”。然后在 DOS 下去找标记,找到后不就能定准位了么。
假如用户要求改变备份盘和保存盘,那么再次运行 WINDOWS 下的程序,所以在程序开头先要把以前可能存在的“标记”先擦掉。
不知道我突然间想到的这个办法是否可行。 ^_^作者: GOTOmsdos 时间: 2006-8-18 00:53 win 盘上打个“备份标记”, 能在DOS下识别吗?
就算LABEL法都不一定的,因为LABEL号实际上是个特殊的这个盘下的文件。。作者: NaturalJ0 时间: 2006-8-18 00:57 标记可以是生成个怪名字的文件或目录啊
在 DOS 下只要用 IF EXIST 就能判断在该盘有没有,如果有,在 FOR 语句中把盘号给变量。作者: fastslz 时间: 2006-8-18 01:02
Quote:
Originally posted by GOTOmsdos at 2006-8-18 00:42:
迷你硬盘读写器是以扇区的方式,不支持解析文件,但是 NTLDR的位置好象不能确定系统分区的吧?(所谓系统分区可能有好几个)
比如,我在几个盘 ...
那是...所以也只能缩小范围到某盘某区,多硬盘多系统都是高手,自己容易解决。我们只是为菜鸟方便,其实盘符再乱也不怕,就怕没法定位NTFS上的文件作者: NaturalJ0 时间: 2006-8-18 01:19 for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%i:\"备份标记式怪文件名" set "备份盘符"=%%i
for %%i in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do if exist %%i:\"保存标记式怪文件名" set "保存盘符"=%%i
[ Last edited by NaturalJ0 on 2006-8-19 at 07:42 ]作者: bdfcy 时间: 2006-8-18 20:40 应该还存在这样的问题:主分区是引导盘,系统装在其它分区(很可能是逻辑分区)作者: NaturalJ0 时间: 2006-8-18 20:58 谢楼上提醒,的确少考虑了些情况。主分区是引导盘,系统装在其它逻辑分驱倒不是问题。我在想有没有可能引导的内容(比如 NTLDR )不在C盘,而在后面的D盘或什么的。我再去想想。
[ Last edited by NaturalJ0 on 2006-8-18 at 21:17 ]作者: NaturalJ0 时间: 2006-8-18 21:19 我觉得好像没问题,我觉得 NTLDR 应该必然在 C 盘,不会跑到其它盘去。作者: fastslz 时间: 2006-8-18 21:54
Quote:
Originally posted by bdfcy at 2006-8-18 20:40:
应该还存在这样的问题:主分区是引导盘,系统装在其它分区(很可能是逻辑分区)