【grub4dos】简单实现diskid功能

博主 wyboot 2月前  576

diskid原名ghostid,主要用于获取ghost风格的磁盘id,举例说明,就是把(hd0,0)转换成1:1的形式。

下面可以直接用grub4dos命令去实现功能,主要思路是把硬盘号和分区号提取出来,然后数值+1再组合;

事先准备一个root文件,内容是#               (“#”后面加一堆空格),因为cat命令既不扩大也不减小目标文件的大小,源文件尾部剩余的部分将被丢弃。

具体的命令:

#先定位你的设备路径,比如
root (hd0,1)
#把root文件里的#换成当前设备名,预期的root内容应该类似于(hd0,1)
cat --locatei="\x23" --replace="%@root%" (0)/root
#在root文件里搜索,的位置,赋值给douhao变量
cat --locatei="\x2C" (0)/root | set douhao=
#变量m存储硬盘号的长度,用“,”位置减3(“(hd”占用3字符)
set /a m=%douhao%-3
#变量mm存储硬盘号的值
cat --skip=0x3 --length=%m% (0)/root | set mm=
#变量mmm存储ghost软件下的能识别的硬盘号
set /a mmm=%mm%+1
#变量dhao存储逗号(包含逗号)前面所有字符的长度
set /a dhao=%douhao%+1
#变量ykuohao存储右括号的位置
cat --locatei="\x29" (0)/root | set ykuohao=
#变量n存储逗号和右括号之间的差值
set /a n=%ykuohao%-%douhao%
#变量nn存储分区号的长度
set /a nn=%n%-1
#变量nnn存储分区号的值
cat --skip=%dhao% --length=%nn% (0)/root | set nnn=
#变量nnnn存储ghost软件下的能识别的分区号
set /a nnnn=%nnn%+1
#梳理结果,m为硬盘号,n为分区号
set m=%mmm%
set n=%nnnn%
#输出ghost风格的磁盘id格式
echo %m%:%n%
#输出omnifs风格的磁盘id格式
echo %m%.%nn%:
#最后还可以把临时变量都删除掉,因为变量名及变量值采用的都是扇区的访问方式。变量名占用一个扇区,每个变量值单独占用一个扇区(最大长度 512 字节)。
set douhao=
set mm=
set mmm=
set dhao=
set ykuohao=
set nn=
set nnn=
set nnnn=

这样就简单的实现了diskid的功能。

最新回复 (0)
    • CBoot's Blog
      2
        登录 注册
返回