|
ghost自动备份时,活动主分区、最后分区号与盘符的确定思路和批处理
使用了第三方软件minitow(for win)/minito(for dos),软件下载及使用可去dos联盟。
windows下解决方案
一,思路
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,对上面的信息进行处理,获得活动主分区,及最后分区和最后分区对应的盘符。
二,具体方法。
【说明,本人水平有限,相信有更好的处理办法。下面的批处理是正在使用的,正确性应基本没问题。
批处理中的一些代码改造自他人在回答其它问题时的答复。】
dos下的思路相同,处理方法有些不同。
批处理如下。【】为说明。
-------------------------------
@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
:mini_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
============================
增加Windows下手动改变盘符后测试结果,没问题。(把E:改成了M:)
1,硬盘信息。
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 3594
1:2 = E: PRIMARY NO YES 17 NTFS/HPFS 7467 0
1:3 = F: D: LOGICAL NO NO 07 NTFS/HPFS 10001 7576
1:4 = G: M: LOGICAL NO NO 07 NTFS/HPFS 15005 8530
1:5 = D: F: LOGICAL NO NO 0B FAT32 APPZ 30004 17233
1:6 = H: G: LOGICAL NO NO 07 NTFS/HPFS 44453 19378
2,输出结果:
活动主分区号1:1 最后分区号1:6 最后分区对应的盘符G:
-----------------------------------------------------------------
说明:以上处理方案,不适用于用U盘启动,且启动后u盘盘符为C:的情况(启动后盘符为A:的,仍可使用)。
附上处理方案中用到的工具,包括minitow(for win)/minito(for dos),strings.com。
[ 本帖最后由 lianjiang 于 2007-5-30 05:49 PM 编辑 ] |
|