无忧启动论坛

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

[求助] configfile (md)4+8不能立刻返回主菜单

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-29 14:12:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
执行 pause --wait=5 &&  configfile (md)4+8

结果 configfile (md)4+8
不会被执行

查了帮助和grub4dos文档,都没这个方面的提示。

经过测试,pause返回是 0 也就是真

用别的命令配合 configfile (md)4+8 只要是连接付 &&或者|| 都不会执行。

问题已经解决:
原因是gfxmenu /message,我的主菜单用它做的。

直接用fontfile (ud)/fonts.gz 去掉gfxmenu /message 解决。

不知道是不是BUG。

[ 本帖最后由 hotdll 于 2011-9-29 19:51 编辑 ]
2#
发表于 2011-9-29 14:22:12 | 只看该作者
你看看源代码吧。当 pause 返回 “假” 的时候,&& 后的 configfile 命令就不执行了。

如果您确认源代码有错误,你可以给 chenall 说一下。

你希望 pause 怎么样操作呢?是不是希望,在等待 5 秒期间,敲入按键时返回 “真”,不敲入按键就返回 “假” 呢?
回复

使用道具 举报

3#
发表于 2011-9-29 16:21:49 | 只看该作者

回复 #1 hotdll 的帖子

configfile (md)4+8
写错了吧
应该是
configfile (md)4+8
回复

使用道具 举报

4#
 楼主| 发表于 2011-9-29 16:57:04 | 只看该作者
原帖由 tingyue-wu 于 2011-9-29 16:21 发表
configfile (md)4+8
写错了吧
应该是
configfile (md)4+8


没有错啊,是英文空格。
单独执行没问题。
回复

使用道具 举报

5#
发表于 2011-9-29 17:02:41 | 只看该作者

回复 #4 hotdll 的帖子

我测试没问题啊  pause --wait=5 && configfile (md)4+8   

5秒内敲回车 或者 等5秒过后都会执行
回复

使用道具 举报

6#
 楼主| 发表于 2011-9-29 17:02:45 | 只看该作者
原帖由 不点 于 2011-9-29 14:22 发表
你看看源代码吧。当 pause 返回 “假” 的时候,&& 后的 configfile 命令就不执行了。

如果您确认源代码有错误,你可以给 chenall 说一下。

你希望 pause 怎么样操作呢?是不是希望,在等待 5 秒期间,敲 ...


不点大大,测试的结果与pause无关。

应该是 && 或者|| 不能和 configfile (md)4+8 一起使用。

例如echo this is test && configfile (md)4+8 也同样只会执行前面的命令。

应该是个BUG?
回复

使用道具 举报

7#
发表于 2011-9-29 17:12:32 | 只看该作者

回复 #6 hotdll 的帖子

最新版grub测试没问题  可以得到执行  你用的什么时候的grub
回复

使用道具 举报

8#
发表于 2011-9-29 17:14:49 | 只看该作者
楼上你们两人同时发帖。

我测试没问题啊  pause --wait=5 && configfile (md)4+8   

5秒内敲回车 或者 等5秒过后都会执行


有此,就证明错误在 hotdll。完毕。
回复

使用道具 举报

9#
发表于 2011-9-29 17:18:13 | 只看该作者
没有错啊,是英文空格。
单独执行没问题。


光 “空格是英文的”,这是 远远不够 的。你的 “括号” 和 “加号” 等,也必须是英文的,这没得可以 “商量” 的。
回复

使用道具 举报

10#
 楼主| 发表于 2011-9-29 18:15:01 | 只看该作者
原帖由 不点 于 2011-9-29 17:18 发表


光 “空格是英文的”,这是 远远不够 的。你的 “括号” 和 “加号” 等,也必须是英文的,这没得可以 “商量” 的。

不点大大,我确定全部是英文的。因为我在命令行模式下直接输入 configfile (md)4+8是立刻返回到主菜单了。

我的GRUB4DOS版本是您发布的9.16

我刚写了个批处理,发现批处理里面好像也是不立即执行,需要等到程序执行完毕了才返回。


  1. !BATEX
  2. debug off
  3. #判断grubd4os版本是否支持
  4. checkrange 20110721:-1 read 0x8278 || clear && echo Grub4Dos Version Too Old. && echo You should use grub4dos-0.4.5b-2011-07-21 or above from && pause http://code.google.com/p/grub4dos-chenall/downloads/list && exit
  5. :INPUT
  6. set wincd=
  7. set /p /u wincd=请输入文件名:
  8. if not "%wincd%"=="" goto FISO
  9. pause --wait=5 没有发现任何输入5秒后请重新输入正确的文件名!
  10. goto INPUT
  11. exit
  12. :FISO
  13. find --set-root /%wincd% || goto NISO
  14. call SRSF6N FIRA
  15. map /%wincd% (0xff)
  16. map --hook
  17. chainloader (0xff)
  18. exit
  19. :NISO
  20. pause --wait=5 没有找到该文件请检查U盘根目录是否存在该文件!
  21. configfile (md)4+8
  22. exit

复制代码


如果输入错误的文件名,会执行到configfile (md)4+8 这句,但是不会立刻返回到主菜单,而是离开批处理。和用||以及&&连接符的结果一样。
但是把MENU里title下的命令执行完毕了,才会返回菜单,但是这个时候已经出现错误提示了,必须按任意键才能返回主菜单。
menu

  1. title 【 2 】启动WIN系统盘ISO安装系统
  2. echo - 安装说明:
  3. echo - 第一次执行该菜单应选择光盘启动。
  4. echo - 重启后再执行该菜单不做任何操作。
  5. echo - 请将系统盘ISO文件放在U盘根目录。
  6. echo - 请将文件名大写,如:WIN$.ISO
  7. echo - 请输入ISO文件名,如:WIN$.ISO
  8. checkrange 0x80 read 0x8280 && map (hd0) (hd1)
  9. checkrange 0x80 read 0x8280 && map (hd1) (hd0)
  10. FINDISO
  11. boot
复制代码
回复

使用道具 举报

11#
 楼主| 发表于 2011-9-29 18:24:04 | 只看该作者
刚去下载C大最新的9.28的版本也是如此?
回复

使用道具 举报

12#
 楼主| 发表于 2011-9-29 18:27:56 | 只看该作者
原帖由 sratlf 于 2011-9-29 17:12 发表
最新版grub测试没问题  可以得到执行  你用的什么时候的grub

你这样测试

  1. pause --wait=5 && configfile (md)4+8 && echo test1
  2. echo test2
复制代码


你看看结果

我要的是直接回主菜单,不要执行echo test2
回复

使用道具 举报

13#
发表于 2011-9-29 18:40:02 | 只看该作者
你怎么解释,sratlf 执行成功了?

我弄不懂批处理,还是让 chenall 来说吧。
回复

使用道具 举报

14#
发表于 2011-9-29 18:44:48 | 只看该作者
对了,configfile 是一条特殊命令,似乎程序确实对它进行了特殊处理。需要看看源代码。
回复

使用道具 举报

15#
 楼主| 发表于 2011-9-29 19:07:06 | 只看该作者
原帖由 不点 于 2011-9-29 18:40 发表
你怎么解释,sratlf 执行成功了?

我弄不懂批处理,还是让 chenall 来说吧。


不点大大您看楼上我发的哪个测试,可能是执行了,但是并没有立刻返回。
执行玩sratlf的哪个语句后没有立刻返回主菜单而是还继续执行下面的命令,如果是commandline输入的话,那么还是停留在commandline下的。
回复

使用道具 举报

16#
发表于 2011-9-29 19:08:58 | 只看该作者

回复 #12 hotdll 的帖子

我测试正常,首先我用你修改5.19NATIVE版的那个FB,在内置菜单中添加一菜单项。
title [3] test
configfile (ud)/ss.lst该菜单项在GRLDR内置菜单中。
然后在(ud)/建立一菜单文件,ss.lst,内容为:
pause --wait=5 && configfile (md)4+8
echo this is no configfile
启动后出现主菜单,选菜单3,调用ss.lst,出现倒计时5秒,完毕后返回主菜单。
以主测试在qemu中测试。grldr为9月18日版,即你的FB原版不动。
回复

使用道具 举报

17#
发表于 2011-9-29 19:11:03 | 只看该作者
注,以上测试是用简易启动测试器,直接加载FB文件在QEMU中测试的结果。
回复

使用道具 举报

18#
 楼主| 发表于 2011-9-29 19:32:05 | 只看该作者
原帖由 幸运的草 于 2011-9-29 19:11 发表
注,以上测试是用简易启动测试器,直接加载FB文件在QEMU中测试的结果。

我也是用的简易启动测试器啊。。。。
不是吧。同一个命令你测试的和我测试的结果相差这么大?

太邪门了。我发现我总是遇到这种邪门的问题,并且一弄就是一个下午。
回复

使用道具 举报

19#
 楼主| 发表于 2011-9-29 19:33:23 | 只看该作者
原帖由 hotdll 于 2011-9-29 19:32 发表

我也是用的简易启动测试器啊。。。。
不是吧。同一个命令你测试的和我测试的结果相差这么大?

太邪门了。我发现我总是遇到这种邪门的问题,并且一弄就是一个下午。


难道是因为我的菜单是内置菜单的原因?
回复

使用道具 举报

20#
发表于 2011-9-29 19:37:52 | 只看该作者
有可能是BUG,,,不过接下来几天国庆比较忙,我没空去查了,改天再查一下。

目前你暂时尽量免避这样使用,可以换一种方式。
比如:
pause && goto :main_menu

:main_menu
configfile (md)4+8
回复

使用道具 举报

21#
 楼主| 发表于 2011-9-29 19:49:57 | 只看该作者
原帖由 chenall 于 2011-9-29 19:37 发表
有可能是BUG,,,不过接下来几天国庆比较忙,我没空去查了,改天再查一下。

目前你暂时尽量免避这样使用,可以换一种方式。
比如:
pause && goto :main_menu

:main_menu
configfile (md)4+8


晕!
找到原因了
我加载了gfxmenu /message的原因。
这个命令不支持gfxmenu /message返回。
回复

使用道具 举报

22#
发表于 2011-9-29 21:23:04 | 只看该作者

回复 #21 hotdll 的帖子

经测试,如果在内置菜单中,加载MESSAGE,执行该语句会出现你说的结果。但在外置菜单中,加载MESSAGE后,执行该语句,正常。
 是BUG?也不是BUG。
因为内置菜单=(md)4+8。
回复

使用道具 举报

23#
发表于 2011-9-29 22:13:55 | 只看该作者
原帖由 hotdll 于 2011-9-29 18:27 发表

你这样测试

pause --wait=5 && configfile (md)4+8 && echo test1
echo test2


你看看结果

我要的是直接回主菜单,不要执行echo test2



和幸运的草结果一样  无论怎样都是返回主菜单  没有出现你的状况  用的0928版
回复

使用道具 举报

24#
发表于 2011-9-29 23:03:34 | 只看该作者
hotdll 可能是在菜单初始化命令组中使用 configfile。也就是说,在所有的 title 之前。

在那个时候,通常不应该使用 configfile 命令。因为 configfile 有特殊的用途,它是一个兼容手段。

此时遇到 configfile 命令,很可能暂时 “记住” 它,而等到其他初始化命令都执行完了之后,才真正执行它。

也就是说,有一个 “延迟执行” 的效果。

请避免这样使用。

如果确实想使用,请在 title 之后使用。

-------------------

请仔细想想,究竟是否有必要在 title 之前就使用带有条件的 configfile 命令?

想达到什么目的?

如果又与 gfxmenu 一起使用,则又意图达到什么效果?

你想让 gfxmenu 显示哪个菜单?
回复

使用道具 举报

25#
 楼主| 发表于 2011-9-30 08:07:16 | 只看该作者

回复 #24 不点 的帖子

1、title 之前没有使用带有条件的 configfile 命令
2、一级菜单,没有二级菜单
3、是想用户交互的时候输入参数错误导致批处理或者菜单执行错误的时候,给用户一个提示,等待5秒后返回到主菜单。
4、之所以这么做是因为我觉得一个健壮的程序是需要有错误返回机制的(java这点做的很好),一个好的利用程序做的批处理或者菜单也应该是健壮的。尽可能的去友好的提示错误的原因,给客户简单的提示和解决办法。并适当的给一个重新来过的机会。

[ 本帖最后由 hotdll 于 2011-9-30 09:50 编辑 ]
回复

使用道具 举报

26#
发表于 2011-9-30 08:34:46 | 只看该作者

回复 #24 不点 的帖子

原来是这样啊,怪不得在命令行状态下,configfile 无title的菜单文件总是返回到命令行,然后输入boot也没用,只有按Esc键才会执行,我总以为是菜单文件哪里有错误;以前configfile 使用有title的菜单总是直接执行了。

[ 本帖最后由 mygamexxx 于 2011-9-30 08:37 编辑 ]
回复

使用道具 举报

27#
发表于 2011-9-30 09:00:29 | 只看该作者

回复 #24 不点 的帖子

同一条这样的语句,如果是在内置菜单中,且加载message的情况下,即使放在title后执行也是如此。
而在外置菜单中却没问题。
命令状态下没问题。
是不是BUG,是不是特殊情况,我不知,但结果如此。
回复

使用道具 举报

28#
发表于 2011-10-1 08:37:09 | 只看该作者
谁上传一个可以重现问题的测试文件,我没有用过GFXMENU.
回复

使用道具 举报

29#
 楼主| 发表于 2011-10-1 10:02:03 | 只看该作者
原帖由 chenall 于 2011-10-1 08:37 发表
谁上传一个可以重现问题的测试文件,我没有用过GFXMENU.

以前的我没备份,我今天抽空给你重写一个。
回复

使用道具 举报

30#
发表于 2011-10-1 10:28:16 | 只看该作者
不用测试,代码本来就是如此。

如果 configfile 位于 “初始化命令组” 中,则 configfile 延迟执行,直到全部初始化命令都执行完了,才执行 configfile 的动作(跳转到 restart_config 处)。

此时如果插入 gfxmenu 命令,则等到 gfxmenu 执行完了才执行 configfile 命令。

解决办法:不要使用 gfxmenu 命令。

我前面已经提问过了,没有得到 hotdll 的答复:gfxmenu 与 configfile 一起使用,你希望 gfxmenu 显示哪个菜单?

是显示当前菜单呢?还是显示 configfile 之后的菜单?

如果意图显示当前菜单,你就不要执行 configfile 命令。

如果意图显示configfile 指定的菜单,你就不要执行 gfxmenu 命令,而等到进入 configfile 的新菜单以后再执行 gfxmenu 命令。

问题根本不需要解决。

之所以要延迟 configfile 的执行,也是有原因的,这个逻辑也尽量不要随便改动。我印象中,如果不这样,则无法应付那些导致无限循环的 configfile 命令。请 chenall 斟酌吧。不是说绝对不能改,而是说,要小心一点。改动之后有可能出现一系列的问题。

有关 configfile 的执行,涉及到函数、变量以及 goto 标号,逻辑调节很精细、很复杂,弄不好顾此失彼,就要带来潜在问题了。因此,提醒到此,不要轻易更动。

[ 本帖最后由 不点 于 2011-10-1 10:35 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 12:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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