无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5056|回复: 15
打印 上一主题 下一主题

[求助] 如何书写满足特定条件的菜单?

[复制链接]
跳转到指定楼层
1#
发表于 2012-1-2 01:26:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iftitle [if exist (hd0,0)/bootmgr] [04] 启动 Windows 7
chainloader /bootmgr
此为:在(hd0,0)上查找bootmgr, 如果存在 bootmgr 文件的话就进行加载,否则该菜单项不显示。
如果要在所有分区上查找bootmgr 文件,若存在,就进行加载,否则该菜单项不显示。该如何修改菜单?
2#
发表于 2012-1-2 02:15:26 | 只看该作者
iftitle [find --set-root /bootmgr] [04] 启动 Windows 7

find --set-root /bootmgr
chainloader /bootmgr
回复

使用道具 举报

3#
 楼主| 发表于 2012-1-2 03:04:29 | 只看该作者

回复 #2 weibin6199 的帖子

谢谢您的指教!问题已解决。
尝试过:
iftitle [if exist find --set-root /bootmgr] [04] 启动 Windows 7

find --set-root /bootmgr
chainloader /bootmgr
失败。原来是多了个if exist
回复

使用道具 举报

4#
发表于 2012-1-2 09:11:26 | 只看该作者
哈哈 昨天的合盘grub4dos菜单全部用了iftitile

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=204621&extra=page%3D1

我在正常启动菜单使用了iftitle
  1. iftitle [find --set-root /BOOT/0PE.BIN]  启动0PE
  2. chainloader /BOOT/0PE.BIN || find --set-root /BOOT/0PE.BIN &&  chainloader /BOOT/0PE.BIN

  3. iftitle [if exist (cd)/BOOT/ISOLINUX.BIN || if exist (cd)/ISOLINUX.BIN]  转ISOLINUX菜单
  4. #因为ISOLINUX只支持光驱或ISO启动,因此需要指定为(cd),避免出错!
  5. chainloader (cd)/BOOT/ISOLINUX.BIN || chainloader (cd)/ISOLINUX.BIN

  6. iftitle [find --set-root /LDLINUX.SYS || find --set-root /BOOT/LDLINUX.SYS]  转SYSLINUX菜单
  7. find --set-root /LDLINUX.SYS || find --set-root /BOOT/LDLINUX.SYS
复制代码
PXE启动菜单
  1. iftitle [if exist (pd)/BOOT/0PE.BIN] 0PE
  2. chainloader /BOOT/0PE.BIN
复制代码

[ 本帖最后由 zhs509 于 2012-1-3 13:17 编辑 ]
回复

使用道具 举报

5#
发表于 2012-1-2 22:39:26 | 只看该作者
^_^,难怪我看着2楼的回复总觉得有点别扭...
回复

使用道具 举报

6#
发表于 2012-1-3 12:58:58 | 只看该作者
原帖由 zhs509 于 2012-1-2 09:11 发表 iftitile [find --set-root /BOOT/0PE.BIN]  启动0PE
楼上这句写得不太严谨呀!有个明显的bug  如果零Pe引导文件在 /boot 下连菜单都无法生成! 此项菜单选项 的语句块  ||find --set -root  /boot/**     变成了只有根目录下的引导文件无法加载才找boot文件夹下的引导文,而根目录下无引导boot下存在引导却连菜单项都不会生成???     顺便弱弱的补句:iftitle  这命令也敲错了喔!(手机登陆的引用代码不太全,海含)  

[ 本帖最后由 x9tian 于 2012-1-3 13:11 编辑 ]
回复

使用道具 举报

7#
发表于 2012-1-3 13:11:39 | 只看该作者
原帖由 x9tian 于 2012-1-3 12:58 发表

楼上这句写得不太严谨呀!有个明显的bug  如果零Pe引导文件在 /boot 下连菜单都无法生成! 此项菜单选项 的语句块  ||find --set -root  /boot/**     变成了只有根目录下的引导文件无法加载才找boot文件夹下的 ...



他这个从语法上讲没什么错误。但从实际效果讲,“||”后的部分纯属多余,因为条件中已执行过find --set-root命令,即如果存在要找的文件,已经将所在盘设为root,这时只要加载就成了。如果找不到,这个菜单项不被显示,所以也没有机会去执行“||”之后的部分。

x9tian老大可能多日未关注grub4dos了,iftile没有写错,是新近加的条件菜单命令。
回复

使用道具 举报

8#
发表于 2012-1-3 13:15:38 | 只看该作者
再说一句,对于已经启动到grub4dos环境的维护盘,对于我们来讲必然会把相应的维护工具放在自己启动的维护盘中,因此可以直接chainloader或者configfile之,用不着find。如果一定要加判断,那if exist要比find好。

那个[find --set-root /XXX]的条件改为[find /XXX]应该更合理,这样不会在载入菜单还没执行什么操作的时候因条件菜单而改变了root设备。

[ 本帖最后由 lafter 于 2012-1-3 13:20 编辑 ]
回复

使用道具 举报

9#
发表于 2012-1-3 13:19:57 | 只看该作者

回复 #6 x9tian 的帖子

确实敲错了。。。

为什么我喜欢用find --set-root 我打算菜单光盘、普通写入、UD通用。。。

后面的应该也不会有太大的影响就先不修改了。。。
----------------------------------------------------------------------------------------------------------------------------------------------
重新用iftitle修改了下,将合盘的XX.LST菜单文件减少到3个(VBE简体中文、GFX简体中文、VBE繁体中文)
哈哈 增加了几个条件判断,实现了CD、HDD、UD、PXE菜单通了

[ 本帖最后由 zhs509 于 2012-1-3 14:14 编辑 ]
回复

使用道具 举报

10#
发表于 2012-1-4 01:55:54 | 只看该作者

标题

原帖由 zhs509 于 2012-1-3 13:19 发表
确实敲错了。。。

为什么我喜欢用find --set-root 我打算菜单光盘、普通写入、UD通用。。。

后面的应该也不会有太大的影响就先不修改了。。。
------------------------------------------------------- ...
嗯嗯,
     不点大大曾说过G4D,还竟量少用  find ,除非一去不复返Grub  原因有二:可能改变root;非内存查找,低配置机严重影响速率!(好像我遇到的机器没第二类现像)
     我对不点大的这话理解是:操作dos类菜单能不用就不用,因为dos工具用完基本上都有返回grub环境使用別的菜单什么的!至于加载Pe引导进Pe想那啥就那啥!(反正回不去,至于影响速率由于没遇到过经常忽视了,必竟自用无必要注意。到是坛子里有公开版本发布的为了照顾弱机的用户体验有必要留心下)!
回复

使用道具 举报

11#
发表于 2012-1-4 02:30:15 | 只看该作者

标题

原帖由 lafter 于 2012-1-3 13:11 发表

这个从语法上讲没什么错误。但从实际效果讲,“||”后的部分纯属多余,因为条件中已执行过find --set-root命令,即如果存在要找的文件,已经将所在盘设为root,这时只要加载就成了。如果找不到,这个菜单项不被显示,所以也没有机会去执行“||”之后的部分。
    这个严格的讲还是能持行到的,在根目录,存在0pe.bin,但无法被引导(可能合盘时未替换掉模板中的对应0pe空字节引导)  || 连接符后的语句 还是能被持行到。(不过遇到这情况机率无限接近于零)

     个人觉得本着‘油多不坏菜的原则’ 还是保留吧!@_@  当然如果菜单内置的话考虑到字节限制,不要也是适当的。
    题外话:当年列兵时 曾因 "||" 被坛里某位兄弟"说教"了一顿!
     最早接触 ‘&  &&   |  ||’  是dos中!   当时刚接触grub 完全是白纸一张,见坛中一贴子中g4d菜单中居然像批处理样用到了‘||’。在跟贴中就回了句  ‘||这管道连接符用得真好’  接果被人说教了一顿-_-||
回复

使用道具 举报

12#
发表于 2012-1-4 10:19:40 | 只看该作者

回复 #8 lafter 的帖子

这个说得对,条件菜单中不要随便使用导致root改变的语句,否则出现问题很难查找。
回复

使用道具 举报

13#
发表于 2012-1-4 15:33:04 | 只看该作者

回复 #12 hhh333 的帖子

iftitle里面执行的命令执行完成之后会自动恢复未执行时的root。。

所以不用担心iftitle命令里面的命令改变ROOT。
回复

使用道具 举报

14#
发表于 2012-1-4 15:37:38 | 只看该作者

回复 #13 chenall 的帖子

那这样的话,是不是说条件菜单中执行的语句不影响环境,只是一个判断条件?
那条件判断有的执行部分还不能省。
回复

使用道具 举报

15#
发表于 2012-1-4 16:16:08 | 只看该作者

回复 #14 hhh333 的帖子

刚开始时的测试版的条件菜单,执行命令会修改当前root.
后面的发布时的版本已经改了,执行的命令只用于判断,并且会恢复到原来的root。

为了提升效率可以参考一下GRUB4DOS里面的MENU.LST菜单,我有写了一些IFTITLE的例子。

在菜单中使用iftitle [fint --set-root命令,命令里面可以不用再次find --set-root
回复

使用道具 举报

16#
发表于 2012-1-4 17:44:16 | 只看该作者

回复 #15 chenall 的帖子

谢谢C大回复,下次又可以精简写法了。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-16 19:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表