|  | 
 
| [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 编辑 ]
 | 
 |