zxw 发表于 2010-12-21 15:42:43

[20150128]自动列表·自动菜单·数字启动

本帖最后由 zxw 于 2015-1-28 23:10 编辑

注:建议认真看完1#、3#、4#、5#贴再提问。

一.脚本简介:
读chenall大侠帖子《GRUB4DOS 批处理脚本的简易应用》后,受启发制作了这个GRUB4DOS 简易批处理脚本。
特点:可生成自动列表、自动菜单,输入数字回车启动;也可在命令行及菜单实现简单通用加载启动一般文件。

二.基本用法:
注:示例用法中的run都放置在command 指定的目录下,如有变动请自行加上路径。
::用法:
:: 1.直接启动
:: 如:RUN MAXDOS.IMG
:: RUN FIRADISK WIN.ISO
:: RUN .AUTOMENU
:: 其他详细用法请见后面的用法法例。
:: 注意: (1)扩展名为gz/img/ima 默认都当成软盘来启动;
:: (2)扩展名为ISO作为一个光盘镜像来启动;
:: (3)扩展名为BIN的文件(如SETUPLDR.BIN)识别为PE用引导文件,适合任意分区启动;
:: (4)扩展名为lst/usr/0pe/diy的识别为菜单文件启动。
:: (5)无扩展名的识别为系统引导文件启动。
:: 2.列表窗口:
:: (1)输入方式同直接启动(当然没有run字样);当前窗口的文件可输入对应数字代替。
:: (2)firadisk驱动文件,如文件名为firadisk.img,路径或在当前目录或在默认路径,可用字母F(忽略大小写,下同)代替。
:: (3)输入一个字母M,回车返回指定的主菜单。可自行设置主菜单如:--set-menu=(hd0,0)/boot/menu.usr ,默认为(md)4+8)
:: (4)输入“ M iso文件”,这个M是为iso文件指定--mem加载参数。
::说明:
:: (1)<>为必选;[]为可选,PATH默认为/BOOT/IMGS/,可以自己修改成其它路径。
:: (2)PATH可以是相对路径,如:/BOOT/IMGS/ ;也可以是绝对路径,如:(ud)/BOOT/IMGS/.
:: (3)PARA为参数,必须前置,也可以组合,简单示例如下:
:: run --txt /boot/.input #强制启用文本模式,即显示彩色菜单(此时显示中文乱码),并进入自动列表;
::   run --set-menu=(ud)/boot/menu.usr --set-path=/boot/ #设置主菜单(ud)/boot/menu.usr及默认路径(取代脚本内所调用的默认路径/boot/imgs/),并进入自动列表;
::   run --set-ext=.iso .automenu #显示默认目录下含指定扩展名.iso文件的自动菜单。
:: run --set-root=(ud) /boot/imgs/maxdos.img #为相对路径的文件(/boot/imgs/maxdos.img)指定要查找的第一个设备ud.
:: 本脚本支持GRUB4DOS版本见更新日志。
:: 下载地址:<A href="http://bbs.wuyou.net/attachment.php?aid=108854http://bbs.wuyou.net/attachment.php?aid=108854

三、更新日志:详见3#贴.

四、参数详解:详见4#贴.

五、用法示例:详见5#贴.

六、效果贴图:
1.自动列表效果(文本模式):


2.自动列表效果(图形模式,加载unicode字体):



3.自动菜单效果(文本模式):


4.自动菜单效果(图形模式,加载unicode字体):



七、脚本下载:

1. 测试版:

(限支持2015-01-20后的grub4dos)



(限支持新版grub4dos;支持VBE模式)(不再更新)


2.兼容版:(不再更新)
支持20110903以后的grub4dos;按检测到的grub4dos版本是否支持vbe予以分别处理中文显示。)


[ 本帖最后由 zxw 于 2012-11-27 14:21 编辑 ]

chenall 发表于 2010-12-21 15:50:43

沙发,支持,..

比较方便使用.嘻嘻,还可以再进一步对dos工具箱或MAXDOS进行处理...

输入某个数字或命令直接启动该镜像里面的对应工具.HOH....

zxw 发表于 2010-12-21 16:16:12

本帖最后由 zxw 于 2015-1-28 16:31 编辑

更新日志:

12-24:整合chenall自动生成菜单模块、sratlf的firadisk模块。
01-02:纠正列表窗口目录切换失灵的bug;序号统一为两位数字;其它细节修改。
         支持grldr需2011-01-01以上版本。
01-03:1.列表整体前移一字符;进一步优化脚本代码。
         2.纠正2010lifefx在#167 反映的目录转换次数较多时显示错误提示的bug。
01-07:新版测试。目前仅支持2011-01-06fix版grldr;
         新版仅自动生成菜单、自动生成列表需要WENV(tuxw版最新)。
01-11:变更获取数字对应文件的方式;加载自动列表前有进度显示;从列表加载同路径自动菜单
         相对以前速度变快;其它关于列表功能的改进。
         注:新版只支持grub4dos2011-01-11新版,除自动菜单与自动列表,可以不要wenv文件。
               自动菜单与自动列表请下载chenall大的原版wenv。
01-12+:从此版开始不再需要wenv文件;支持pxe显示菜单(未测试);删除一些冗余代码;
            增加了一些容错机制。
01-16:1.再次变更获取数字对应文件的方式;
         2.智能加载maxdos.img内的部分dos工具,避开烦琐的参数写法,应该兼容目前的新旧版本,用户使用见示例;
         3.部分代码优化。
01-18: 1.重写定位代码。部分解决ud盘被识别为fd0可见区无法列表的问题。对错误输入大部分有人性化的提示,并返回列表窗口。
          2.使用firadisk命令行和菜单不再使用先前的写法,统一规范为firadisk.img。脚本提供用户自定义默认路径接口。
          3.使用脚本前可root或find --set-root定位设备。
01-23 :1.利用新版grub4dos新增功能改写部分代码;
          2.对不支持的后缀名文件增加提示;
          3.添加处理文件名长短名的问题(不一定很精确,有可能误杀,但机率很小)
          4.只支持grub4dos2011-01-23以上的版本.
01-26 :1.利用新版grub4dos新增功能改写部分代码;
          2.修复call 中套用goto 存在的潜在bug,最小程度读取软盘并最大程度增强相对路径搜索。
          3.只支持grub4dos2011-01-26以上的版本.
01-27 :尝试添加对0pe的进一步支持,详细用法见pseudo大的建议贴。
01-29:进一步增加对0pe的支持,(0pe中如只调用列表显示及数字选择,而不用本脚本启动文件,可用run /boot/imgs/.list的方法调用。)。
01-31:将bin、chain两模块合成一个;试图智能处理bin加载的两种方式(chainloader\kernel).
02-07:1.受网友建议,RUN FILE增加支持默认路径,如:RUN MAXDOS.IMG。
         2.吸收Plantsoot和sratlf研究成果,调整优化了一下MAXDOS模块。
02-09:调整自动列表获取文件代码,如maxdos.img对应数字为6,要启动diskgen,现在可在列表简化为:6 diskgen
02-12:修改自动列表模块,准备下一步增加字体支持;修改磁盘交换代码。
02-15:1.增加字体支持。
          用法:①或加载本脚本前自行加载字体;
                 ②或如(bd)/boot/grub/目录下放置有unifont、fonts(属unicode字体文件),run --gfx 
          2.增加部分参数支持,参数必须前置,也可以组合,如:
    run --txt /boot/.input 强制启用文本模式,即显示彩色菜单(此时显示中文乱码),并进入自动列表;
    run --set-menu=(md)4+8 --set-path=/boot/imgs/ 设置主菜单及默认路径 ,并进入自动列表;
    run --set-ext=.iso.automenu 显示默认目录下含指定扩展名.iso文件的自动菜单。
02-22:增强显示指定多个扩展名。注:指定多个扩展名请用/分隔。(从20110412版改用|分隔)
         如:run --set-ext=.iso/.img.automenu 显示默认目录下含指定扩展名.iso、.img文件的自动菜单。
               run --set-ext=.iso/.img                  显示默认目录下含指定扩展名.iso、.img文件的自动列表。
02-24:支持在自动窗口输入参数后再输入数字选择。
03-01:纠正可能由于root有延迟造成绝对路径可能失效的bug.
03-05:1.尝试添加zhhsh提供的FiraDisk(最新版本)支持非载入内存map方式启动PE1.x 的ISO。   最新版本:Firadisk驱动帮助和下载。
         2.简单尝试添加gfxmenu支持自动菜单。参数设置:run --set-gfxmenu=yourpath/message
         3.支持用户自定义返回的主菜单为相对路径。
         4.加载脚本前的变量由原usrpath、usrmenu调整为path、menu,以便各参数的统一。
03-06:纠正一处导致--txt参数失效的bug。
03-07:1.加强unifotn字体搜索。字体命令、字体文件分别必须命名为unifont、fonts;
            可自定义路径,如--set-fontpath=/fonts/,默认为:/boot/grub/
         2.增加了个--quiet参数,详见参数详解。
03-09:接受幸运之草的建议,由用户自动选择加载run模块前是否清除变量。用法:set reset=on,则清除所有变量;否则不清除。
03-10:接受幸运之草的部分建议,简单处理了一下unifont与gfxmenu在自动菜单中的兼容性问题。二参数同在时,如先加载unifont字体,则缷载unifont字体;如先加载gfxmenu,则不再加载unifont字体。
03-14:纠正幸运之草发现的在列表窗口二次加载字库的bug等.
03-15:调整加载firadisk驱动代码,默认以载入内存方式启动iso;如启动连续存储的PE1.x 的ISO,可加参数--pe1。
03-16:试图解决加载unifont字体列表可能未对齐的问题;取消前置变量gfxmenu.
03-17:一些细节修改。增强探测字体是否加载;增强自动列表窗口文本模式和图形模式之间“瞬间”切换的功能。
03-18:取消“瞬间”切换;一些细节优化。
03-22:1.添加--lab参数。
         2.简单添加对puppy等的支持。用法示例:run /puppy/vmlinuz initrd.gz
03-24:增加对含空格文件名的处理,目前只限于自动列表、自动菜单。只支持grub4dos2011-03-23以上的版本.
03-29:增加对命令行下对空格文件的处理。含有空格的路径及文件,必须使用双引号界定。只支持grub4dos2011-03-29以上的版本.
0401:增加封装版:将firadisk.img、unifont、fonts封装进模块,新增了个--fira参数,其它功能没有什么改变。
0402:增加对目录的识别,在自动列表或自动菜单点击相应数字会生成对应的列表或菜单。
0412:增强扩展名过滤模块:
      1.分隔符换用|。    2.分别用.过滤无扩展名文件,/过滤文件夹。   3.+(或无+-)显示指定的扩展名文件,-不显示指定的扩展名文件。
0413:纠正自动列表中序号为20文件不能启动的bug;一些细节处
0428:1.利用新版功能,简化脚本(只更新脚本版)。只支持grub4dos2011-04-27以上的版本.
      2.增强maxdos.img的其它工具的调用。
      3.消除一些潜伏已久的bug,避开一些可能存在的bios的bug.感谢幸运之草的大量测试。
0501:由于新版grub4dos2011-04-30对批处理参数有调整,跟进更新。
0502:纠正一处不易碰到的bug;再次优化自动列表代码;仅支持grub4dos2011-05-01以上版本。
0509:受chenall指点,重写加载unifont字库后列表显示的模块。
0511:自动列表实现简单翻页功能。按+或-,回车即可。
0513:纠正自动列表中最后一个文件未显示的bug.
0527:纠正一处加载bin文件的小bug.
0601:1.纠正0pe传递参数失效的bug.
      2.纠正加非unifont字体可能导致列表未对齐的bug.
      3.给翻页功能添加标识,如>>或<<。
      4.纠正由于以上更新,导致可能出现的错误提示。感谢bairishan反馈。
0620:增加对新版0PE的支持。(新版0PE用/0PE/M.0PE取代/BOOT/GRUB/MENU.0PE)。
0813:纠正退出run模块后字体未缷载的bug.
0830:完善退出机制。最大程度保持调用run前后环境的一致性。
0908:1.解决加载unifont字体与0pe冲突问题。
      2.取消前置变量支持。
      3.增加支持ramos,用法示例:
         (1)RUN --mem /PATH/RAMOS (hd0)
         (2)RUN --mem --top /PATH/RAMOS (hd0)
         (3)RUN --fira /PATH/RAMOS (hd0)
      4.增加对0PE.ISO的参数支持,类似调用MENU.0PE。例:RUN /PATH/0PE.ISO 6
0914:1.修复ramos支持的一处bug.
      2.磁盘交换代码调整。
0918:1.纠正一处调用maxdos工具不够严谨的代码。
      2.调整代码,使封装版运行更快。
      3.提供更小的字体下载。
0925:调整缷载UNIFONT字库的代码。
0926:解决封装版的一个潜在bug
1004:支持制作ramos.(见#5用法示例)
1007:1.再次增强对maxdos工具的处理。
      2.增加专用参数--list以显示bat工具,输入数字启动对应bat。一般没多大用处,备查看。
1014:避开新版grub4dos的dd命令使用1M开始的64kb区域作为缓存的内存地址。
1021:1.调整临时内存以适应新版grub4dos内存分布。
      2.调整代码,以避开新版grub4dos的echo与旧版的不兼容。
1102:1.简单添加一个--force参数,用法见示例菜单。以映像文件内的某个文件启动。
      2.增加--hideinfo参数,隐藏提示信息。
1103:利用1103grub4dos的cat之locatei参数优化代码。
1115:测试版,内置winvblk驱动,添加--winv参数,用法同--fira.
1121:避开一处貌似是grub4dos的bug。因暂时无法再现,故未报告。
1124:测试版增加:自动列表按进入命令行,按ESC返回列表的功能。其它细节优化。
1129:自动列表,按照所检测到的分辨率,调整一屏所显示的行数。
1202:自动菜单增加检测是否加载背景图片;初步尝试调用grub4dos内部函数。限今天的grub4dos版本。
1208:感谢pesudo提供,纠正一些细节,绕开疑似grub4dos的bug;取消前置变量。
1223:1.扩展名过滤参数改用strstr函数检测,速度更快。对于无扩展名请用..表示。
          2.修复run .list中变量%list%丢失的bug.(感谢pesudo指正)
20120202:改进算法,列表显示速度更快了。
20150128:应jianliulin要求,采取最新尾续方式重新制作,没有添加新功能。限支持限支持2015-01-20后的grub4dos

[ 本帖最后由 zxw 于 2012-2-2 14:10 编辑 ]

zxw 发表于 2010-12-21 16:48:08

参数详解:


感谢幸运的草的整理:
一、在run语句或自动列表窗口中可选择使用的参数(以后简称:内置参数)
--txt                     ;强制以文件模式显示自动列表或自动菜单
--gfx                     ;强制以正常显示汉字,需要同一目录(默认为(bd)/boot/grub/)下放置有unifont、fonts(属unicode字体文件)
--set-fontpath=       ;设置unifont字体命令及文件的路径。如:--set-fontpath=/fonts/,默认为/boot/grub/
--step1                  ;加载firadisk驱动后强制从iso文件启动。
--step2                  ;加载firadisk驱动后强制从本地硬盘启动。
--pe1                     ;非载入内存map方式启动PE1.x 的ISO。
--fira                     ;先加载firadisk驱动,后加载ISO文件.
--winv                  ;先加载winvblk驱动,后加载ISO文件.*new!
--hideinfo               ;隐藏提示信息*new!
--mem                  ;强制整体将iso文件整体map进内存后启动。
--set-debug=         ;设置调试模式.
--set-menu=          ;设置在自动列表窗口中按“M”后返回的菜单,默认(md)4+8即GRLDR内置菜单.
--set-path=         ;设置用户自定义路径,取代默认路径/boot/imgs/,主要用于自动列表、自动菜单或返回时的列表路径(新版也可以包括文件)。
--noboot               ;加载光盘、软盘映像后不启动。
--set-root=            ;设置根设备,例--set-root=(hd0,0)。
--set-ext               ;设置自动列表或自动菜单中要显示的文件类型。多类型时用“|”分隔。
--set-gfxmenu=   ;设置message文件路径,以gfxmenu方式启动自动菜单。
--set-lab=            ;如菜单名为menu.zxw,后缀名并不是通用的.lst,可设置参数--set-lab=.lst ,以便脚本能识别为菜单文件。

以上参数可以组合使用,中间用空格隔开,位置必须排在前面。
=================================================
二 、以下只能在列表窗口中使用:
f+空格+数字         ;先加载firadisk驱动,后加载数字序号的ISO文件。要求在默认路径或当前目录有firadisk.img文件。
m+空格+数字       ;强制将数字序号的ISO文件map进内存后启动,这时m=--mem。
m                     ;自动列表中返回定义菜单。
n                        ;相当于--noboot*new!
c                        ;返回命令行.

三、虚拟文件,或功能参数说明:
.input                   ;自动列表,按数字后启动对应文件   *new!
.list                     ;提供列表,按数字后以变量%list%形式提供对应文件。   *new!
.automenu            ;自动菜单。
.ramos                  ;制作ramos. *new!




[ 本帖最后由 zxw 于 2011-12-8 11:30 编辑 ]

zxw 发表于 2010-12-21 17:05:02

用法示例:

title   启动PE.ISO(无--mem方式)
commandRUN /BOOT/IMGS/PE.ISO                      ##或者:RUN PE.ISO

title   启动PE.ISO(加--mem方式)
commandRUN --mem /BOOT/IMGS/PE.ISO             ##或者:RUN --mem PE.ISO

title   启动PE.ISO(加载firadisk驱动)         ##firadisk驱动文件可改名,可自带路径。
RUN /boot/imgs/firadisk.img /BOOT/IMGS/PE.ISO    ##或者:RUN firadisk.img PE.ISO(两个文件均为默认路径)
                                                                     ## 或者:RUN /boot/imgs/firadisk.img PE.ISO(两个文件一个目录)
boot

title   启动TOOLS.ISO
commandRUN --force /BOOT/IMGS/TOOLS.ISO /BULDR   #以tools.iso内的/BULDR为引导文件。


title   运行MAXDOS工具箱
commandRUN--mem /BOOT/IMGS/MAXDOS.IMG               ##或者:RUN--mem MAXDOS.IMG

title   运行DiskGen磁盘管理
commandRUN--mem /BOOT/IMGS/MAXDOS.IMG DISKGEN ##或者:RUN--mem MAXDOS.IMG DISKGEN

title用GHOST备份/还原系统
run--mem maxdos.img ghost

title 自动搜索GHO文件
run--mem maxdos.img ghm

title 全自动网络克隆
run--mem maxdos.img netgh


title   启动XP/2003
RUN /ntldr
boot

title   启动VISTA/WIN7
RUN /bootmgr
boot

title   生成自动菜单
command RUN /BOOT/IMGS/.AUTOMENU            ##或者:command RUN .AUTOMENU

title   生成自动列表
commandRUN /BOOT/IMGS/                               ##或者:RUN

title   生成自动列表(不显示指定扩展名.iso、.img文件、无扩展名文件及文件夹)
commandrun --set-ext=-.iso.img../

title   生成自动列表(只显示指定扩展名.iso、.img文件、无扩展名文件及文件夹)
commandrun --set-ext=+.iso.img../    或   commandrun --set-ext=.iso.img../

title   制作ramos步骤1(硬盘映像vhd须自备)
commandrun --step1 --fira .ramos vhd=/hdd.img iso=/winxp.iso

title   制作ramos步骤2(硬盘映像vhd须自备)
commandrun --step2 --fira .ramos vhd=/hdd.img iso=/winxp.iso

title启动ramos
command run --fira /hdd.img (hd0)

title仅调用封装版内置字体 *new!
command run --gfx .end

title仅调用封装版fira驱动 *new!
command run --fira .end

启动ramos:
(1)RUN --mem /PATH/RAMOS (hd0)
(2)RUN --mem --top /PATH/RAMOS (hd0)
(3)RUN --fira /PATH/RAMOS (hd0)



===========================================================================
title   启动0PE
commandRUN /BOOT/GRUB/MENU.0PE

title 0PE之XP中文版
commandRUN /BOOT/GRUB/MENU.0PE 1

title 0PE之GHOST32专用CMDPE
commandRUN /BOOT/GRUB/MENU.0PE 5

title 0PE之ISO/PE启动器 \n 用于安装系统、启动PE。\n 含SRS驱动、firadisk支持,认硬盘有外置工具。
commandRUN /BOOT/GRUB/MENU.0PE 6

title 启动老毛桃PE(/ISO/LMT911PE.ISO) \n 用0PE之ISO/PE启动器直接启动指定iso。含SRS驱动、firadisk支持
commandRUN /BOOT/GRUB/MENU.0PE 6 /ISO/LMT911PE.ISO

title 0PE之软盘镜像启动器 \n 启动各种DOS工具等。
command RUN /BOOT/GRUB/MENU.0PE 9

title    0PE手工指定驱动 *new!
run --set-ext=.zip (bd)%_0PESRS%.list
set srs=%list%
echo -e \nThe Driver (Pack) File is:\n
pause --wait=1 %srs%
#0x60070做输入标志
write 0x60070 1
……

[ 本帖最后由 zxw 于 2011-12-22 23:37 编辑 ]

2010lifefx 发表于 2010-12-22 01:36:38

测试运行不正常

1、没有你的彩色字符。
2、输入数字回车后启动不了相应的文件 如下图




title test1
RUN
configfile (md)0x3000+0x10

title test2
RUN /boot/imgs/.input
configfile (md)0x3000+0x10
这俩菜单都不行


遍历完文件后就退到grub4dos命令行了。

可否把您的菜单发来学习下。

[ 本帖最后由 2010lifefx 于 2010-12-22 01:38 编辑 ]

chenall 发表于 2010-12-22 01:38:46

彩色字符必须的文本模式下才有效,即没有加载背景图和字体.

2010lifefx 发表于 2010-12-22 01:41:20

回复 #7 chenall 的帖子

你好!

我没有加载背景图。
fontfile (bd)/boot/grub/fonts
terminal console
graphicsmode 0x6A
terminal graphics
foreground ffffff
background 005090
只有上面的设置。用的中文版。加了中文字体。

反复试了下
fontfile (bd)/boot/grub/fonts
terminal console
graphicsmode 0x6A
terminal graphics
原来有了这部分就没彩色了。

[ 本帖最后由 2010lifefx 于 2010-12-22 01:50 编辑 ]

chenall 发表于 2010-12-22 01:48:24

原帖由 2010lifefx 于 2010-12-22 01:41 发表 http://bbs.wuyou.net/images/common/back.gif
你好!

我没有加载背景图。
fontfile (bd)/boot/grub/fonts
terminal console
graphicsmode 0x6A
terminal graphics
foreground ffffff
background 005090
只有上面的设置。用的中文版。加了中文字体。

汗,没有注意看我前面的贴子?没有加载背景图和字体的情况下才可以显示菜单.

2010lifefx 发表于 2010-12-22 01:52:07

回复 #9 chenall 的帖子

嘿嘿!不好意思。有点漏神。呵呵。不过这个run我这里不能正常运行。

1、彩色出来了
2、运行还是不正常



[ 本帖最后由 2010lifefx 于 2010-12-22 01:56 编辑 ]
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [20150128]自动列表·自动菜单·数字启动