无忧启动论坛

标题: 活动分区与最后分区确定的批处理(DOS/omnifs版) [打印本页]

作者: lianjiang    时间: 2008-4-22 09:46
标题: 活动分区与最后分区确定的批处理(DOS/omnifs版)
活动分区与最后分区确定的批处理(DOS/omnifs版)
@echo off
if %nhdd%.==. set nhdd=1
:BEGIN
if exist dpit2.ini del dpit2.ini >nul
if exist p_d.ini del p_d.ini >nul
omnifs  /dl=%nhdd% diskinfo>omni_dd.txt
type omni_dd.txt|find /i "%nhdd%.1:" >nul
if errorlevel 1  goto fail
strings lines=LINESIZE omni_dd.txt
strings lines=add %lines%,2
set line=1
:omni
if %line%.==%lines%. goto omni_1
strings line=add %line%,1
strings lined=read omni_dd.txt,%line%
strings omn_row1=left %lined%,1
if not %omn_row1%.==%nhdd%. goto omni
echo %lined%|find /i "FAT" >nul
if not errorlevel 1 goto omni_6
echo %lined%|find /i "NTFS" >nul
if not errorlevel 1 goto omni_6
echo %lined%|find /i "Active" >nul
if not errorlevel 1 goto omni_6
goto omni
:omni_6
echo %lined%>>dpit2.ini
strings omn_row5=mid %lined%,5,1
if %omn_row5%.==:. goto omni_4
strings omn_row3=mid %lined%,3,1
strings omn_row4=mid %lined%,19,3
if not %actpw%.==. goto omni_5
strings omn_row5=mid %lined%,24,6
goto omni_5
:omni_4
strings omn_row3=mid %lined%,3,2
strings omn_row4=mid %lined%,20,3
if not %actpw%.==. goto omni_5
strings omn_row5=mid %lined%,25,6
:omni_5
if not %omn_row5%#==Active#  goto  omni_2
set actpw=%omn_row3%
:omni_2
set lastpw=%omn_row3%
if not %omn_row4%.==. echo  %omn_row1%.%omn_row3%   %omn_row4%>>p_d.ini
goto omni
:omni_1
if %actpw%.==. set actpw=1
cls
echo.
echo 第一硬盘活动分区是:  %nhdd%:%actpw%
echo 第一硬盘最后分区是:  %nhdd%:%lastpw%
goto exit_1
:fail
cls
echo.
echo    Fail, 未能获取第一硬盘有效分区信息。
echo.
pause
rb
:exit_1
set line=
set lines=
set lined=
set omn_row1=
set omn_row3=
set omn_row4=
set omn_row5=

仅供参考。
欢迎批评指正。

[ 本帖最后由 lianjiang 于 2008-4-22 10:07 AM 编辑 ]

snap0020a.jpg (46.01 KB, 下载次数: 161)

snap0020a.jpg

snap0021a.jpg (30.14 KB, 下载次数: 177)

snap0021a.jpg

snap0154.jpg (50.75 KB, 下载次数: 162)

snap0154.jpg

作者: cchessbd    时间: 2008-4-22 10:50
这个代码看得头晕啊,而且dpit对某些分区是会出错的。

一键ghost里面的又过于简单,而且某些ID不能用;对某些分区也出错。

实际上这个问题只要基于ghost,就变得很简单……
作者: lianjiang    时间: 2008-4-22 11:02
明明写了是用了omnifs,怎么会出现dpit会出错的问题?呵呵。
个人认为,目前,omnifs与ghost搭配,应是兼容性最好的方案之一。

当然,这里之所以用omnifs,还有一个主要目的要解决实现备份到任意路径的问题。
作者: lianjiang    时间: 2008-4-22 11:05
仅用ghost,处理活动分区域最后分区,确实是够了,可是ghost的信息,却无法简单地直观表示出硬盘的分区信息,以供向导操作时使用。
作者: cchessbd    时间: 2008-4-22 13:34
原帖由 lianjiang 于 2008-4-22 11:02 AM 发表
明明写了是用了omnifs,怎么会出现dpit会出错的问题?呵呵。
个人认为,目前,omnifs与ghost搭配,应是兼容性最好的方案之一。

当然,这里之所以用omnifs,还有一个主要目的要解决实现备份到任意路径的问题。


这个是的……

哎 我接触的尽是些古董机器……
工厂里面的,64M内存,5G硬盘(实际容量 42xxMB)。返修品啊
作者: lianjiang    时间: 2008-4-22 14:06
老机器上,omnifs的兼容性存在问题? 不明所以。
作者: adiwdmd    时间: 2008-4-22 15:19
支持,我也换了omnifs。lianjiang你的盘里有awk你怎么不用awk找分区,那不是简单点,难道awk兼容性不好?
另外我向请教lianjiang,有没有好用的dos下更改分区id的软件?谢谢
作者: lianjiang    时间: 2008-4-22 15:33
仅仅是确定最后分区及活动分区的话,awk很容易实现;
我的批处理里面考虑到还要进行一些其他处理,感觉还是strings方便些。
没发现兼容性问题,纯属个人习惯。

修改id,很少接触,可用grub修改id,其他的不会。
作者: cchessbd    时间: 2008-4-22 16:29
aefdisk dspt 好象可以在命令行修改

spfdisk diskgen图形界面修改
作者: lianjiang    时间: 2008-4-22 17:27
原帖由 adiwdmd 于 2008-4-22 03:19 PM 发表
支持,我也换了omnifs。lianjiang你的盘里有awk你怎么不用awk找分区,那不是简单点,难道awk兼容性不好?
另外我向请教lianjiang,有没有好用的dos下更改分区id的软件?谢谢

以前曾发过一个帖子。
“初试gawk,发现太强大了。确定硬盘最后分区,一行搞定。


初试gawk,发现太强大了。确定硬盘最后分区,一行搞定。
使用gawk,只需要一行。

作者: adiwdmd    时间: 2008-4-22 17:36
标题: 回复 #9 cchessbd 的帖子
原帖由 cchessbd 于 2008-4-22 04:29 PM 发表
aefdisk dspt 好象可以在命令行修改

spfdisk diskgen图形界面修改

请教:我使用aefdisk只能修改主分区id,不能修改扩展分区的id,
不知道是怎么回事

[ 本帖最后由 adiwdmd 于 2008-4-22 05:39 PM 编辑 ]
作者: lianjiang    时间: 2008-4-22 17:42
没发现dspt有直接修改id的功能。
好像只有隐藏与解除隐藏的功能。

也许通过直接编辑扇区数据能实现,可惜水平有限不会用。

[ 本帖最后由 lianjiang 于 2008-4-22 05:44 PM 编辑 ]
作者: wowfans    时间: 2008-4-22 22:16
DSPTW [Disk] [/ChangeType:type:partno] [/Y]
      /ChangeType: Change Partition Type.
      type: 00-FF.
      partno: Partition Number.


dos下的dspt也应该有这个功能吧
作者: lianjiang    时间: 2008-4-23 07:40
原帖由 wowfans 于 2008-4-22 10:16 PM 发表
DSPTW [Disk] [/ChangeType:type:partno] [/Y]
      /ChangeType: Change Partition Type.
      type: 00-FF.
      partno: Partition Number.


dos下的dspt也应该有这个功能吧

windows版与dos版有差别,没有修改id的功能。
或许是我所用版本问题。
dos版帮助中显示日期为2007-08-08.
作者: 歌理    时间: 2008-11-15 19:57
近日想玩个一键还原,试试了几个DOS下的分区号获取软件,各有所长,各有所短,最后还是决定用:
OMninfo来取得活动分区及最后分区。
于是重新翻到lianjiang 的帖子,发现1楼的方法太过复杂,简化如下,分享:
(在dos下测试通过)
@echo off
cls
echo Get Hard drive information,please wait.......................
omnifs /dl=1 diskinfo>omni_dd.txt
set win_fqh=
set gho_fqh=
set fqh=0
:begin
strings fqh=add %fqh%,1
if %fqh%==20 goto error
rem  识别活动分区
if not %win_fqh%.==. goto gho_fq
type omni_dd.txt |find /i "1.%fqh%:" |find /i "Active"
if not errorlevel 1 set win_fqh=%fqh%
:gho_fq
rem 识别最后分区
type omni_dd.txt |find /i "1.%fqh%:"
if not errorlevel 1 goto begin
strings fqh=sub %fqh%,1
set gho_fqh=%fqh%

if %win_fqh%.==%gho_fqh%. goto error
if %win_fqh%.==.  goto error
if %gho_fqh%.==.  goto error

echo 活动分区:1:%win_fqh%
echo 最后分区:1:%gho_fqh%
goto end

:error
ECHO  识别硬盘分区错误,程序终止!!

:end
pause
作者: lianjiang    时间: 2008-12-11 15:41
原帖由 歌理 于 2008-11-15 19:57 发表

近日想玩个一键还原,试试了几个DOS下的分区号获取软件,各有所长,各有所短,最后还是决定用:
OMninfo来取得活动分区及最后分区。
于是重新翻到lianjiang 的帖子,发现1楼的方法太过复杂,简化如下,分享:
(在dos下测试通过)
@echo off
cls
echo Get Hard drive information,please wait.......................
omnifs /dl=1 diskinfo>omni_dd.txt
set win_fqh=
set gho_fqh=
set fqh=0
:begin
strings fqh=add %fqh%,1
if %fqh%==20 goto error
rem  识别活动分区
if not %win_fqh%.==. goto gho_fq
type omni_dd.txt |find /i "1.%fqh%:" |find /i "Active"
if not errorlevel 1 set win_fqh=%fqh%
:gho_fq
rem 识别最后分区
type omni_dd.txt |find /i "1.%fqh%:"
if not errorlevel 1 goto begin
strings fqh=sub %fqh%,1
set gho_fqh=%fqh%

if %win_fqh%.==%gho_fqh%. goto error
if %win_fqh%.==.  goto error
if %gho_fqh%.==.  goto error

echo 活动分区:1:%win_fqh%
echo 最后分区:1:%gho_fqh%
goto end

:error
ECHO  识别硬盘分区错误,程序终止!!

:end
pause


翻出此帖看了一下,你的批处理在使用范围上不如我的,即兼容性稍差,
多是一些分区状况你就能发现问题了,呵呵。

因为我的实际应用中,不仅要确定活动分区和最后分区,还要同时进行其他处理。
仅是要活动分区与最后分区的话,不需要那么复杂。

近日也对GGhost一键恢复中使用的批处理进行了修改。
1楼的仅是为了抛砖引玉,就不更新了。
作者: q8q8feng    时间: 2008-12-12 03:49
原帖由 lianjiang 于 2008-12-11 15:41 发表


翻出此帖看了一下,你的批处理在使用范围上不如我的,即兼容性稍差,
多是一些分区状况你就能发现问题了,呵呵。

因为我的实际应用中,不仅要确定活动分区和最后分区,还要同时进行其他处理。
仅是要活 ...

很不错!发现Lianjiang兄在处理代码的时候考虑的还是比较全面!有时间更新一下代码与大家共享,可以让我们也有所提高!
Ps:国外的一些网络不像国内那么好,本可以常关注你的帖子的!加油Lianjiang兄!
作者: lianjiang    时间: 2008-12-12 09:18
原帖由 q8q8feng 于 2008-12-12 03:49 发表

很不错!发现Lianjiang兄在处理代码的时候考虑的还是比较全面!有时间更新一下代码与大家共享,可以让我们也有所提高!
Ps:国外的一些网络不像国内那么好,本可以常关注你的帖子的!加油Lianjiang兄!


最新版的示例见此帖:


一键恢复中最后有效分区及活动分区的确定批处理(for DOS)
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=134072&extra=page%3D1&frombbs=1
作者: yjqd    时间: 2015-9-20 21:19
不能确定最后一个分区
我用的win98启动镜像(24个文件全在),把omnifs、strings加入镜像,把你的活动分区与最后分区确定的批处理(DOS/omnifs版)加入AUTOEXEC.BAT倒数第二行之前,运行后出现活动分区1:1,最后分区1:,后面那个数没有,如果把批处理放在AUTOEXEC.BAT最前面,最后分区识别正常1:5,或者加载ntfs驱动,正常,但ghost又不能在加载了ntfs后运行,是怎么回事,还发现如果镜像中有find文件,运行时直接跳转到失败




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3