|
[2010-12-01]新版WENV已内置GPART命令,使用更简单,以前的方法退休了。 这里下载新版:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=182254&page=100#pid2103878
[2010-11-19]
因为WENV一直在变化,本帖停止更新,以后GPART.BAT将作为一个标准批处理样本随最新的WENV一起打包上传 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&extra=page%3D1
[2010-11-08]
GPARTS.rar
(13.62 KB, 下载次数: 237)
使用方式非常简单了,先指定目标硬盘,再调用批处理即可
压缩包中已包含了所需的两个外部命令 WENV, DISKID
配合最新版grub4dos使用,下载地址
http://code.google.com/p/grub4dos-chenall/downloads/list
!BAT 获取 G4D_DISK 指定硬盘的活动分区号与最后分区号
:成功则生成以下4个变量
WENV (reset GP_G4D_A ; reset GP_G4D_L ; reset GP_GH_A ; reset GP_GH_L)
:目标硬盘
WENV get G4D_DISK || WENV (echo variable G4D_DISK not found ; call kernel)
WENV call cat --length=0 (hd${G4D_DISK})+1 || WENV (echo (hd${G4D_DISK}) not found ; call kernel)
:硬盘分区信息
debug status | WENV set -t _G_DEBUG= && WENV set _G_DEBUG=${_G_DEBUG## } && debug 1
WENV call geometry (hd${G4D_DISK}) | WENV set GP_G4D_A= && WENV set GP_G4D_L=${GP_G4D_A}
:截取结果
WENV check "active"<-"${GP_G4D_A}" (set GP_G4D_A=$${GP_G4D_A%%, active} ; set GP_G4D_A=$${GP_G4D_A## })
WENV check "num: "<-"${GP_G4D_L}" (set GP_G4D_L=$${GP_G4D_L##num: } ; set GP_G4D_L=$${GP_G4D_L%%,})
:转换为GHOST格式
WENV get GP_G4D_A && WENV echo (hd${G4D_DISK},${GP_G4D_A}) | DISKID | WENV set -t GP_GH_A= && WENV set GP_GH_A=${GP_GH_A## }
WENV get GP_G4D_L && WENV echo (hd${G4D_DISK},${GP_G4D_L}) | DISKID | WENV set -t GP_GH_L= && WENV set GP_GH_L=${GP_GH_L## }
:恢复环境
WENV (call debug ${_G_DEBUG} ; reset _G_DEBUG)
[2010-11-03]
最新方法见:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=68#pid2077571
太简单了,只需要一个Grub4Dos批处理
需要新版的WENV(支持变量子串查找)
需要新版的grldr(支持批处理和菜单中使用管道)
[2010-09-29]更新
GPARTS.rar
(2.48 KB, 下载次数: 213)
1.新了解了两个命令的用法
parttype (hdx,y) 可以获取分区类型
makeactive --status (hdx,y) 可以判断是否活动分区
因此,仅就获取分区号而言,不需要指定缓冲区了。
但我仍然保留了缓冲区,因为……
2.使用了新的返回菜单调用方法
GP_MENU 变量改为 GP_CMD
原传递菜单文件
WENV set GP_MENU=/my_menu.lst
改为
WENV set GP_CMD=configfile /my_menu.lst
这样不仅可以传一个菜单文件名进来,甚至可以传一个比较复杂的命令(可以在返回前干一些其它的事件),如
WENV GP_CMD=clear\ngeometry (hd0)\npause press any key to continue...\nconfigfile /my_menu.lst
这个命令首先会写入缓冲区(WENV不能直接run configfile命令),所以这条复合命令的长度不能超过缓冲的大小0x50。但用户可以使用的总长是0x50-1个字节,因为不管用户命令是否以\0结束,gparts.lst将写入缓冲区时都会在最后加一个\0字符。
[2010-09-29]
基于GPARTS.LST获取分区号的“一键gohst”演示版及xDOS介绍
[2010-09-26]更新:
GPARTS.rar
(2.51 KB, 下载次数: 181)
[2010-09-26] (忘了上传更新的附件,补上)
1.硬盘未分区时,返回GP_LAST=0,取消返回变量STR_LAST(之前返回X:0,减少无效的变量名占用)
2.活动分区不存在时,GP_ACTI=0,取消返回STR_ACTI变量(之前返回X:0,减少无效的变量名占用)
经此改动,调用gparts.lst后,肯定会返回的变量是GP_LAST。
如要防止菜单循环调用,请使用 WENV get GP_LAST || configfile ../gparts.lst
3.精简了内部临时变量,并统一以 "_G_" 为前缀,清理时比较清楚
4.默认 debug off 提高速度
首先用两分法找到最大的有效分区号,再读取分区表,判断4个表项中有效的主分区数就可以算出总分区数(实际上就是Ghost所用的最后分区号码)。分析主分区表同样可以确定活动分区编号。
这个有什么用呢?做过“一键ghost”类工具的应该立即能想到吧?
#>>>>>>>>>>>>>>>>>>>>>>>>>>>> 文件注释 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#删除文件注释不影响菜单功能
#文件: gparts.lst
#功能: 查找活动分区、最后分区(ghost)编号
#入口:
# DISK 待查找的硬盘(Ghost)编号,必须指定
# GP_MENU 返回的菜单文件名
#出口:
# GP_ACTI 活动分区号, 同时写入地址ADDR_A(如已指定)
# GP_LAST 最后分区号, 同时写入地址ADDR_L(如已指定)
# STR_ACTI 活动分区字符串(DISK:GP_ACTI)
# STR_LAST 最后分区字符串(DISK:GP_LAST)
#可调整参数
# ADDR_A 活动分区号写入地址, 默认 0x60020
# ADDR_L 最后分区号写入地址, 默认 0x60024
# ADDR_DEF 若设置此变量(任意值),上面2个变量使用默认地址
# ADDR_BUF 指定缓冲区地址, 未设定时默认0x60040(缓冲大小0x50字节)
# GP_PARTS 若设置此变量(任意值),计算出分区数 GP_LAST 就返回
#<<<<<<<<<<<<<<<<<<<<<<<<<<<< 文件注释 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1.最简单的用法
WENV set DISK=1 // 指定待分析的硬盘号
WENV set GP_MENU=.../yourmenu.lst // 指定返回的菜单文件名
configfilg .../gparts.lst // 分析磁盘,完成后自动调用 yourmenu.lst
返回后会增加4个环境变量 GP_ACTI, GP_LAST, STR_ACTI, STR_LAST
2.调整参数
因为 gparts.lst 要分析主分区表,需要 0x50 字节的缓冲区来保存复制的分区表,默认使用 0x60040-0x6008F 内存块,如果跟自己的使用环境冲突,可以指定缓冲区地址
WENV set DISK=1 // 指定待分析的硬盘号
WENV set GP_MENU=.../yourmenu.lst // 指定返回的菜单文件名
WENV set ADDR_BUF=0x60040 // 指定自己的缓冲区首地址
configfilg .../gparts.lst // 分析磁盘,完成后自动调用 yourmenu.lst
3.显式指定 ADDR_BUF=0x60040 与默认使用 0x60040 的区别
不论是否指定ADDR_BUF,在 gparts.lst 被调用期,这个变量名都是存在的,但默认返回后会自动清掉。如果用户显式指定ADDR_BUF,则返回会变量名仍然保留。
GPARTS.rar
(2.51 KB, 下载次数: 193)
[ 本帖最后由 tuxw 于 2010-12-11 12:28 编辑 ] |
|