中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 活动主分区、最后分区号与盘符的确定批处理
作者:
标题: 活动主分区、最后分区号与盘符的确定批处理 上一主题 | 下一主题
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『楼 主』:  活动主分区、最后分区号与盘符的确定批处理

ghost自动备份时,活动主分区、最后分区号与盘符的确定思路和批处理(含win/dos下)


使用了第三方软件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,对上面的信息进行处理,获得活动主分区,及最后分区和最后分区对应的盘符。


二,具体方法。

@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

   此帖被 -15 点积分         点击查看详情   
评分人:【 9527 分数: -15  时间:2007-9-13 08:44




Windows 一键还原
http://www.yjhy.com
2007-5-8 08:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: