无忧启动论坛

标题: 菜鸟初尝Grub4dos 外部命令WENV,不妥之处请大大们指教~~! [打印本页]

作者: 3370123    时间: 2010-11-15 21:30
标题: 菜鸟初尝Grub4dos 外部命令WENV,不妥之处请大大们指教~~!
本人有点小兴趣,喜欢捣鼓电脑,以前学过一点VB,不过很久不用,几乎忘完了,无聊看到0PE有个“可输入式ISO/PE启动器”,就想自己做一个,顺便了解下Grub4dos和WENV吧。
在0PE菜单和chenall大的博客研究了很久
  1. pause --wait=0 -->/MYISO.ISO as default
  2. (ud)/WENV set a=$u,$input,-->Input here(Like this"/MYISO.ISO") or press Enter :
  3. (ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && pause --wait=0 -->Booting /MYISO.ISO
  4. (ud)/WENV run find --set-root ${a}
  5. (ud)/WENV run cat –length=0 ${a} && kernel
  6. (ud)/WENV run map --mem ${a} (0xff)
  7. (ud)/WENV run map --hook
  8. (ud)/WENV run chainloader (0xff)

  9. title -->ISO not found ; Press Enter
  10. configfile (ud)/123.LST
复制代码
把代码复制到文本文档,改名为 123.LST 和 外部命令WENV 文件一起放到 ud 区根目录
然后写一下grldr菜单

title  可输入式ISO/PE启动器
configfile (ud)/123.LST






  



下面附件提供外部命令文件WENV



现在我有个问题是

pause --wait=0 -->/MYISO.ISO as default
(ud)/WENV set a=$u,$input,-->Input here(Like this"/MYISO.ISO") or press Enter :
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && pause --wait=0 -->Booting /MYISO.ISO
(ud)/WENV run find --set-root ${a}
(ud)/WENV run cat –length=0 ${a} && kernel         #里找不到ISO如何返回第一行代码? 现在我只能以我现有的知识转到title了
(ud)/WENV run map --mem ${a} (0xff)
(ud)/WENV run map --hook
(ud)/WENV run chainloader (0xff)

title -->ISO not found ; Press Enter
configfile (ud)/123.LST

请大大们指教,谢谢



[ 本帖最后由 3370123 于 2010-11-15 21:47 编辑 ]

WENV.rar

3.23 KB, 下载次数: 65, 下载积分: 无忧币 -2


作者: sratlf    时间: 2010-11-15 21:57
可以参考我的帖子  http://bbs.wuyou.net/forum.php?mod=viewthread&tid=177790

你附件里的WENV取消了吧  新旧版的WENV命令是不通用的

pause --wait=0 -->/MYISO.ISO as default    ##可用 echo -->/MYISO.ISO as default
(ud)/WENV set a=$u,$input,-->Input here(Like this"/MYISO.ISO") or press Enter :
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && pause --wait=0 -->Booting /MYISO.ISO
(ud)/WENV run find --set-root ${a}
(ud)/WENV run cat –length=0 ${a} && kernel     ##上面已经有find判断了,找不到会直接报错,这句没用
(ud)/WENV run map --mem ${a} (0xff)
(ud)/WENV run map --hook
(ud)/WENV run chainloader (0xff)      ##这句和上面一句用不到WENV运行

title -->ISO not found ; Press Enter
configfile (ud)/123.LST      ##有点无语。。。。

稍稍改下
echo -->/MYISO.ISO as default
(ud)/WENV set a=$u,$input,-->Input here(Like this"/MYISO.ISO") or press Enter :
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && echo -->Booting /MYISO.ISO
(ud)/WENV check ${a:0:1}<>/ set a=/${a}     ## 检测输入内容是否以/开始,不是的话自动加上,防止输入时忘记以/开头
(ud)/WENV run find --set-root ${a} || pause File not found, press any key to return && configfile (ud)/123.LST    ##查找,没有的话提示错误,按任意键重新加载(ud)/123.LST
(ud)/WENV run map --mem ${a} (0xff)
map --hook
chainloader (0xff)

[ 本帖最后由 sratlf 于 2010-11-15 22:14 编辑 ]
作者: sratlf    时间: 2010-11-15 22:00
返回指定的title 可以使用fallback

title iso
fallback 0
echo -->/MYISO.ISO as default
(ud)/WENV set a=$u,$input,-->Input here(Like this"/MYISO.ISO") or press Enter :
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && echo -->Booting /MYISO.ISO
(ud)/WENV check ${a:0:1}<>/ set a=/${a}     ## 检测输入内容是否以/开始,不是的话自动加上,防止输入时忘记以/开头
(ud)/WENV run find --set-root ${a}
(ud)/WENV run map --mem ${a} (0xff)
map --hook
chainloader (0xff)

这样中途执行有任何错误都会返回第一个title  所以find后面可以不加返回了  找不到就会自动返回

[ 本帖最后由 sratlf 于 2010-11-15 22:10 编辑 ]
作者: 3370123    时间: 2010-11-15 22:28
谢谢版主,解决了,不过有些命令还是不太懂,有没有教程?英文的也可以

cat –length=0  和  check ${a:0:1}<>/  不理解

由于没有echo,所以我还是用pause 了

不过用了你3楼的代码,显示很多信息,显的很乱,怎么关闭啊?

而且 (ud)/WENV check ${a:0:1}<>/ set a=/${a}    好像没起作用,我故意不输入 / , 还是会出错的






.

[ 本帖最后由 3370123 于 2010-11-15 22:39 编辑 ]

1.jpg (67.41 KB, 下载次数: 137)

1.jpg

作者: 3370123    时间: 2010-11-15 22:57
最后打算用这些代码,还是谢谢版主了,让我学到很多

title [ 10 ] 可输入式ISO/PE启动器

pause --wait=0 -->默认使用/MYISO.ISO
(ud)/WENV set a=$u,$input,-->请输入(例如"/MYISO.ISO") 或 Enter 使用默认:
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && pause --wait=0 -->正在启动 /MYISO.ISO     
(ud)/WENV run find --set-root ${a} || pause  --wait=0 -->文件没找到 && fallback 9
(ud)/WENV run map --mem ${a} (0xff)
map --hook
chainloader (0xff)
作者: chenall    时间: 2010-11-15 23:35
原帖由 3370123 于 2010-11-15 22:28 发表
谢谢版主,解决了,不过有些命令还是不太懂,有没有教程?英文的也可以

cat –length=0  和  check ${a:0:1}/  不理解

由于没有echo,所以我还是用pause 了

不过用了你3楼的代码,显示很多信息,显的很 ...



最新版的WENV和GRUB4DOS都有echo命令。

新版的WENV带一个wenv-readme.txt你可以看一下就明白了。

最新版wenv下载(正常情况下不再更新)
http://code.google.com/p/grubutils/

也可以下载这里tuxw的增强版(一直在改进中)
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&extra=page%3D1
作者: sratlf    时间: 2010-11-16 00:40
标题: 回复 #4 3370123 的帖子
2#我都告诉你了新旧版的WENV命令不通用  用新版试下吧  新版里附带有说明

还有  这些命令都没有检测你输入的是否合法  你只输入一个f  不报错报什么
作者: 3370123    时间: 2010-11-18 20:12
新版的WENV 倒是能用了
但是在gfxmenu 这个模式 加载了message

出错不会fallback 9 而是返回了menu.lst 而且乱码
如果在文本模式下就不会这样
作者: sratlf    时间: 2010-11-18 22:34
标题: 回复 #8 3370123 的帖子
菜单贴出来  可以肯定是你fallback用错了
作者: 3370123    时间: 2010-11-19 00:12
标题: 回复 #9 sratlf 的帖子
pause --wait=0 -->/MYISO.ISO as default
(ud)/WENV set a=$u,$input,-->input here(like this"/MYISO.ISO") or Enter :
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && pause --wait=0 -->Booting /MYISO.ISO     
(ud)/WENV check ${a:0:1}<>/ set a=/${a}
(ud)/WENV run find --set-root ${a} || pause  --wait=0 -->flie not found && fallback 9
(ud)/WENV run map --mem ${a} (0xff)
map --hook
chainloader (0xff)

问题是,在文本模式下是正常的,但是如果加载了message,故意输入错误,想让它返回fallback 9 ,但是它会返回主菜单,乱码,乱码是文本模式,再去执行它,再故意输错,它就会正常fallback 9 了
作者: sratlf    时间: 2010-11-19 01:04
标题: 回复 #10 3370123 的帖子
fallback 9是什么内容  这样的话应该只是gfx menu引起的错误  试下把fallback 9放在最开始  看是什么情况

fallback 9
pause --wait=0 -->/MYISO.ISO as default
(ud)/WENV set a=$u,$input,-->input here(like this"/MYISO.ISO") or Enter :
(ud)/WENV get a || (ud)/WENV set a=/MYISO.ISO && pause --wait=0 -->Booting /MYISO.ISO     
(ud)/WENV check ${a:0:1}<>/ set a=/${a}
(ud)/WENV run find --set-root ${a} || pause  --wait=0 -->flie not found
(ud)/WENV run map --mem ${a} (0xff)
map --hook
chainloader (0xff)
作者: dcdsyzc    时间: 2022-10-3 17:14
总算看懂了一点




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3