|  | 
 
| ghost自动备份时,活动主分区、最后分区号与盘符的确定思路和批处理 
 使用了第三方软件minitow(for win)/minito(for dos),软件下载及使用可去dos联盟。
 
 Winodws下解决方案。
 
 一,思路
 1,用minitow获得硬盘信息。实例如下:
 ------------------------------------
 N:N    DOS WIN PRI/LOG ACT HIDE ID FILE SYSTEM  LABEL       TOTALmb FREEmb
 1:1  = C:  C:  PRIMARY YES NO   0B FAT32        NO NAME     7538    3652
 1:2  = E:      PRIMARY NO  YES  17 NTFS/HPFS                7467    0
 1:3  = F:  D:  LOGICAL NO  NO   07 NTFS/HPFS                10001   7524
 1:4  = G:  E:  LOGICAL NO  NO   07 NTFS/HPFS                15005   8483
 1:5  = D:  F:  LOGICAL NO  NO   0B FAT32        APPZ        30004   17382
 1:6  = H:  G:  LOGICAL NO  NO   07 NTFS/HPFS                44453   19427
 ------------------------------------
 2,对上面的信息进行处理,获得活动主分区,及最后分区和最后分区对应的盘符。
 
 二,具体方法。
 【说明,本人水平有限,相信有更好的处理办法。下面的批处理是正在使用的,正确性应基本没问题。
 批处理中的一些代码改造自他人在回答其它问题时的答复。】
 批处理如下。【】为说明。
 -------------------------------
 @echo off
 rem by lianjiang
 rem 【获得硬盘参数,保存文件名为hdmini.txt】
 tools\minitow /nohp /ifs /p>temp\hdmini.txt
 rem 【生成简化的硬盘信息,此部分不是必须,只是由于一些信息个人以为不很重要,去除,新文件为hdmini_1.txt】
 setlocal EnableDelayedexpansion
 if exist temp\hdmini_1.txt del temp\hdmini_1.txt >nul
 For /f "tokens=1 delims=\" %%i In (temp\hdmini.txt) do (
 Set var=%%i
 call :sub_012
 )
 endlocal
 rem 【读取活动主分区的分区号%act%,最后分区号%lpartition%及最后分区对应的盘符%ldrive%,可用空间%freesize%】
 For /f "tokens=1-3" %%i In (temp\hdmini_1.txt) do (
 Set lpartition=%%i
 Set ldrive=%%j
 set freesize=%%k
 if %%j.==C:. set act=%%i
 )
 echo 活动主分区号%act%  最后分区号%lpartition%  最后分区对应的盘符%ldrive%
 pause
 goto sub_018
 :sub_012
 rem 【取N:N WIN FREEmb三项数据】
 set s1=!%var:~1,3!
 set s3=!%var:~12,3!
 set s10=!%var:~69,6!
 echo %s1% %s3% %s10%>>temp\hdmini_1.txt
 goto :eof
 :sub_018
 rem 【继续其他处理】
 ----------------
 新文件hdmini_b.txt的形式如:
 N:N WIN FREEmb
 1:1 C:  3652
 1:2     0
 1:3 D:  7524
 1:4 E:  8483
 1:5 F:  17382
 1:6 G:  19427
 
 
 =============================
 DOS下解决方案:
 已通过测试。
 
 所需工具:minito,strings,ifs
 一,思路与windows下相同。
 由于可能要在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
 
 
 二,批处理。
 @echo off
 :BEGIN
 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 quit
 strings lines=add %lines%,1
 set line=1
 echo 硬盘信息:
 :mini
 strings line=add %line%,1
 if %line%#==%lines%# goto mini_1
 strings lined=read mini_dd.txt,%line%
 strings row1=left %lined%,3
 strings row3=mid %lined%,8,2
 strings row5=mid %lined%,19,3
 if %row5%#==YES# set actp=%row1%
 set lastp=%row1%
 set lastd=%row3%
 if not %lined%#==# echo %lined%
 rem if not %lined%#==# echo %lined%>>hdinfor.ini
 rem if %row1%#==N:N# goto mini
 rem if %row5%#==YES# goto mini
 rem echo %lined%>>hdinforb.ini
 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
 
 [ 本帖最后由 lianjiang 于 2007-5-8 08:41 AM 编辑 ]
 | 
 |