Board logo

标题: DOS下如何让批处理自动识别某个盘符是第几个分区? [打印本页]

作者: walu     时间: 2004-4-22 00:00    标题: DOS下如何让批处理自动识别某个盘符是第几个分区?

前言:在DOS下使用GHOST命令行形式时,若要把镜像恢复到分区,GHOST会自动把D盘识别为第2个分区,E盘为第3个分区。。。。。。
但假如中间存在NTFS格式分区和隐藏分区时,E盘就不是第3个分区,F盘也不是第4个分区了。

例子:如果C盘是FAT32分区,D盘是隐藏分区,E盘是NTFS分区,F盘是FAT32分区,在DOS下D盘和E盘是不会显示的,F盘变成了D盘,

问题提出:在DOS下如何让批处理自动识别D盘(实际是F盘)就是硬盘中的第4个分区而不是第2个分区?




作者: Climbing     时间: 2004-4-22 00:00
你是不是把问题搞的太复杂了?GHOST从来都不以盘符为恢复的依据,可以说它只认分区。

仔细想一下你要干什么,然后再去决定如何干。
作者: walu     时间: 2004-4-22 00:00
简单的说,我是想把IBM一键恢复分区所需的文件如IO.SYS、COMMAND.COM等启动文件及GHOST.EXE文件用GHOST打包成一个*.gho文件,然后用PQMAGIC在硬盘分一个主分区(如E盘,卷标SYS_GHOST),再将*.gho文件用GHOST恢复到E盘中去(当然这个过程我只想在DOS自动执行)。这样开机就可以按F11键恢复系统了。
     但将*.gho文件用GHOST恢复到E盘过程中,因为GHOST不以盘符为恢复的依据,它只认分区,在硬盘没有隐藏分区及NTFS格式分区情况下,E盘(SYS_GHOST分区)就是第3分区;但如果D盘是NTFS格式分区,这个SYS_GHOST分区在DOS下变成D盘了。

   所以如何让DOS识别SYS_GHOST分区是第几个分区就变得复杂了。
作者: ggtt     时间: 2004-4-23 00:00
看不明白你想说什么,希望下面的对你有用
rem d:\ghost.exe -clone,mode=pload,src=e:\recover.gho:1,dst=1:1 -sure -rb
rem -sure ------表示对所有问题回答YES
rem -rb   ------表示完成后自动重新启动
rem -fx   ------GHOST完成工作后不显示(Press Ctrl-Alt-Del to reboot),而是直接回到DOS状态
mode=pload 恢复分区
dst=1:1   第一硬盘 第一分区
如果是src=不好确定可以用if exist 一个一个试

作者: walu     时间: 2004-4-24 00:00
唉,你们都不明白的了。幸好一键恢复精灵作者饶晓超能理解,并且准备编出一个有这样功能的程序。
作者: Tamm     时间: 2004-4-24 00:00
看了半天还是没有十分看懂你的意思
希望这些办法对你有用:

1: 如果你事先知道你要操作的目的分区在物理硬盘上排列是为第几个分区,那么 GHOST 恢复的时候根本不存在问题,因为 GHOST 从影象文件恢复到分区的操作时,用于指明目的分是使用 "磁盘:分区" 这样的格式,(比如 DST=1:3)

2:如果并不知道分区是第几个物理分区,但知道分区的卷标是什么,那么你可以使用 Gdisk 和 lmod 这两个工具结合查出它是第几个物理分区,具体操作有点复杂,不过还是可行的.
简单说一下流程:
Gdisk 1 >temp.txt                                      获得指定硬盘的分区列表到一个临时文本
find "label" temp.txt >temp1.txt              用卷标作为关键字提取相关分区的那一行
用 lmod 分析这一行中的信息(具体操作略) 因为 Gdisk 获得的分区列表是有一个固定格式的
所以能用 lmod 全面分析而得到想要的信息.
通过查找这一行中是 "PRIMARY" 还是 "LOGICAL" 以判断其是主分区还是逻辑分区.
因为 Gdisk 表示分区的编号与 Ghost 有所不同, Gdisk 中在主分区和逻辑分区中间会编号一个 "EXTENDED" 扩展分区.所以,Gdisk 显示的分区编号要用于 Ghost 的话就要经过处理才行
具体处理其实也容易,那就是:如果是主分区,就直接使用编号就行了,如果是逻辑分区,就把编号减1 就行了。

把上面的办法变通一下,你也可以用 LMOD 检查已知盘符的分区是物理分区中的第几个分区...

(不适用于 NTFS 分区)


[此贴子已经被作者于2004-4-24 23:31:19编辑过]



作者: Tamm     时间: 2004-4-25 00:00
@ECHO OFF
gdisk 1 > %temp%\temp.txt
TFind /f30,10 "label" %temp%\temp.txt >%temp%\temp1.txt
type %temp%\temp1.txt | lmod set type=[20 $1 U][+]set part=[5 $1] >%temp%\temp.bat
call %temp%\temp.bat
if %type%==LOGICAL count part -1
set type=
del %temp%\temp*.*
:end

以上是通过卷标查找分区号的批处理 (只需将第三行 "label" 改为实际的卷标即可)
如果要通过盘符查找分区号,则将下面这一行替换上述批处理中的第三行:
Tfind /f2,2 "E:" %temp%\temp.txt >%temp%\temp1.txt
(这里以查找 E: 盘为例)

执行结果将分区号写入变量 %part%

本批处理使用了Norton 的 Gdisk 以及 Horst Schaeffer 的三个小程序:  LMOD  TFind   COUNT
作者: willsort     时间: 2004-4-25 00:00
Re walu:

  Quote:
   所以如何让DOS识别SYS_GHOST分区是第几个分区就变得复杂了。

你的意思是否可以这样表述——如何确定DOS系统能识别出的某个盘是硬盘的第几个分区,然后将这个分区号码置于命令行参数中供GHOST调用?


作者: walu     时间: 2004-4-25 00:00


  Quote:
以下是引用willsort在2004-4-25 10:52:26的发言:
Re walu:

    

    你的意思是否可以这样表述——如何确定DOS系统能识别出的某个盘是硬盘的第几个分区,然后将这个分区号码置于命令行参数中供GHOST调用?


willsort实在是高!就是这个意思。
批处理方面,willsort和Climbing都是顶尖级的高手!
请问这个问题可以通过批处理解决吗?
作者: walu     时间: 2004-4-26 00:00
问题已基本解决,感谢Tamm兄弟!
作者: walu     时间: 2004-4-26 00:00
对于Tamm兄弟的这一句“如果是主分区,就直接使用编号就行了,如果是逻辑分区,就把编号减1 就行了”(如果用PQMAGIC在第一主分区上分出一个主分区后这一句不会出错)

仍是有错。因为如果用PQMAGIC在扩展分区上分出一个主分区后,直接使用编号就会出错,因GDISK虽认出了这是个主分区,但仍把它纳入逻辑分区中算分区号。

作者: Tamm     时间: 2004-4-26 00:00


  Quote:
以下是引用walu在2004-4-26 11:46:22的发言:
......如果用PQMAGIC在扩展分区上分出一个主分区后,直接使用编号就会出错,因GDISK虽认出了这是个主分区,但仍把它纳入逻辑分区中算分区号。

我没看明白...
你说 “... 如果用PQMAGIC在扩展分区上分出一个主分区后 ... ”
在扩展分区上怎么建立主分区呢...?


你的意思是用PQ把扩展分区缩小,然后在硬盘的扩展分区后面留出的那一部分再建立第二个主分区吗?
也就是这样?:    [第一个主分区] [扩展分区(内含逻辑分区)] [第二个主分区]

不好意思,我提出这个方案的时候确实没有考虑过这样的情况。
如果是这样的话,Gdisk 会使用这样的编号:

1  第一主分区
2  第二主分区
3  扩展分区
4... 扩展分区下的逻辑分区

但是我不知道 Ghost 在这样的情况下是如何使用分区编号的......
作者: walu     时间: 2004-4-26 00:00
Tamm兄弟,我已找到另外一个程序代替GDISK就很完美了,但这个程序执行它后都出现“Press any key to continue...”即要求按任意键才能继续执行后面的程序,我不想用手工按任意键,而想执行它后自动接着执行后面的程序,请问要怎样做?
作者: Tamm     时间: 2004-4-26 00:00
能不能赐教...
使用什么代替的?

^_^
作者: walu     时间: 2004-4-26 00:00
是一个只有27K的文件,见附件打开附件
作者: walu     时间: 2004-4-27 00:00
Re:Tamm
“TFind /f30,10 "label" %temp%\temp.txt >%temp%\temp1.txt ”
这一行中的/f30,10究竟是什么意思呢?假如temp.txt的内容如下

      
                  Fixed Disk Drive Status

        HD0     16379 MB

        Drive   Volume Name      Size           File System
         1 PA   Connectix        5601 MB        FAT32   
         2 P    IBM_SERVICE      6558 MB        FAT32   
         3 L                      102 MB        FAT16   
         4 L                      400 MB        FAT32   
         5 L                      196 MB        FAT16   
         6 L                      196 MB        FAT16   
         7 L                      251 MB        FAT16   
         8 L    IBM_SER           306 MB        FAT32   
         9 L                      243 MB        FAT32   
        10 L                      173 MB        NTFS   
        11 L                      227 MB        FAT32   
        12 L                      102 MB        FAT16   
        13 L                      322 MB        FAT32   
        14 L                      275 MB        FAT32   
        15 L                      196 MB        FAT16   
        16 L                      235 MB        FAT16   
        17 L                      329 MB        FAT16   
        18 L                      510 MB        FAT32   
        19 P                      157 MB        FAT16
        20 L                      173 MB        NTFS   
        21 L                      227 MB        FAT32   
        22 L                      102 MB        FAT16   
        23 L                      322 MB        FAT32   
        24 L                      275 MB        FAT32
        25 L                      275 MB        FAT32
        26 L                      275 MB        FAT32
        27 L                      275 MB        FAT32
        28 L                      275 MB        FAT32
        29 L                      275 MB        FAT32
        30 L                      275 MB        FAT32
        31 L                      275 MB        FAT32
        32 L    IBM_SERVI       196 MB        FAT16   
        
Press any key to continue...


则“TFind /f30,10 "label" %temp%\temp.txt >%temp%\temp1.txt ”中的f后面要相应变为多少?
作者: Tamm     时间: 2004-4-28 00:00
这是 TFind 的定位搜索, /Fc,l  只从每行的第 c 列开始搜索,搜索范围 l 列
f30,10 的意思就是只搜索每行的第 30列-第40列这个范围。
这样能极大地减少误搜索的可能性

你用it.com的时候,你可以打开 temp.txt 去数一下,看看它的卷标是出现在第几列。

更正一下:因为卷标的长度是允许11个字符,所以我这个 /f30,10 其实是有错误的。
实际应用中,你可以适当放宽搜索范围。
作者: foxrao     时间: 2004-4-28 00:00


  Quote:
以下是引用walu在2004-4-24 13:31:34的发言:
唉,你们都不明白的了。幸好一键恢复精灵作者饶晓超能理解,并且准备编出一个有这样功能的程序。

程序写好了打开附件
作者: walu     时间: 2004-4-28 00:00
饶晓超兄弟真是厉害,谢谢你!我们QQ再谈
作者: hill2002zc     时间: 2004-5-20 00:00
你的问题看样解决了吧   你可以到 电脑报2003合定本去看看去
那里有你需要的东西
作者: 红尘无罪     时间: 2004-5-20 00:00
哇,我都看不懂啊!好自卑哦!!我要好好学习!!
作者: jyssysz     时间: 2004-5-22 00:00
用PQDI。
作者: gmy     时间: 2004-5-22 00:00
GHOST8.0的命令行支持 源于NTFS分区里GHO文件,形式是 1:2\xxx.gho (第1硬盘第2个分区里的xxx.gho文件)

GDISK n 可以显示所有分区,配合STRINGS和FIND命令可以提取盘符(让DOS与WINXP下显示的盘符一致),我正着手编写批处理,用于新版的GHOST8.0启动盘。
作者: haonanren     时间: 2004-5-23 00:00


  Quote:
以下是引用gmy在2004-5-22 上午 10:23:59的发言:
GHOST8.0的命令行支持 源于NTFS分区里GHO文件,形式是 1:2\xxx.gho (第1硬盘第2个分区里的xxx.gho文件)

GDISK n 可以显示所有分区,配合STRINGS和FIND命令可以提取盘符(让DOS与WINXP下显示的盘符一致),我正着手编写批处理,用于新版的GHOST8.0启动盘。

万分期待![em27][em27][em27][em27][em27][em27]
作者: crshen     时间: 2004-5-29 00:00


看看这个行不行,点击进入

[此贴子已经被作者于2004-5-29 下午 04:27:01编辑过]