无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: chenall
打印 上一主题 下一主题

grub4dos 外部命令 wenv [2010-10-17 ]

  [复制链接]
241#
 楼主| 发表于 2010-11-29 22:55:07 | 显示全部楼层
重新编译了一个grub4dos版本,尝试解决上面输出重定向冲突的问题。
回复

使用道具 举报

242#
 楼主| 发表于 2010-12-1 00:07:37 | 显示全部楼层
原帖由 2010qaqz111 于 2010-11-30 22:37 发表

原来要放在括号里面了,谢谢,我试试。


另外一个问题,wenv 的包里有个说明文件,里面说到可以用(wenv-command1 ; wenv-command2 ; wenv-command3) 连续执行多个命令,
还有就是
]]]
]]&
]]|
的格式 ...


往前翻几页就可以得到答案了。你可以不要括号。

]]] 和 ; 的区别。
]]]会清除前一句的error值,而;不会,对于一般用户来说区别不是很大。
回复

使用道具 举报

243#
 楼主| 发表于 2010-12-6 14:43:30 | 显示全部楼层
已经给GRUB4DOS内置批处理脚本添加了参数支持(%0,%1,%9)
%0批处理脚本文件名.%1-%9第1到9个参数.
回复

使用道具 举报

244#
 楼主| 发表于 2010-12-6 23:49:26 | 显示全部楼层
嘻嘻,使用内置的批处理功能加上参数,可以在某些情况下代替WENV的变量设置。

也可以简化菜单。。
比如在合盘时,如果有许多都是启动软盘镜像这时就派上用场了。

首先建一个文件在grub目录下(或其它地方,具体参考GRUB4DOS外部命令运行机制)
比如文件名runimg
===runimg 内容===================
!BAT
map --mem %1 (fd0)
map --hook
rootnoverify (fd0)
chainloader +1
======runimg 结束================
然后就可以在菜单中简单的调用runimg来启动了比如

title maxdos
runimg /BOOT/MAXDOS.IMG

title MEMTEST
runimg /BOOT/MEMTEST.GZ

如果配合WENV加上判断就可以写一个通用的启动脚本,比如名字是run

然后通过类似如下的命令直接启动,也方便一些菜鸟使用GRUB4DOS。^_^,因为不需要记那么多命令了。

run /ntldr

run /boot.iso

run /boot.img

用WENV还可以继续增强一下功能,比如用wenv dir的功能,自动查找符合条件的文件来启动。。。。

有兴趣的朋友可以尝试写一个run脚本。

[ 本帖最后由 chenall 于 2010-12-6 23:53 编辑 ]
回复

使用道具 举报

245#
 楼主| 发表于 2010-12-7 09:00:15 | 显示全部楼层
昨天的版本发现了一个问题,已经修复上传.

已经整合lzma补丁.
回复

使用道具 举报

246#
 楼主| 发表于 2010-12-7 12:18:25 | 显示全部楼层
原帖由 sratlf 于 2010-12-7 10:28 发表
批处理参数部分不是很了解  想请教下参数不存在的会怎么处理

即runimg内容
!BAT
map --mem %1 (%2)
map --hook
rootnoverify (%2)
chainloader ()+1
结束

菜单
title teat1
runimg /DTS.IMA fd0
...


嗯,就是这样的,没有参数就是替换为空白
回复

使用道具 举报

247#
 楼主| 发表于 2010-12-7 12:20:49 | 显示全部楼层
原帖由 zxw 于 2010-12-7 09:41 发表
呵,模块化菜单更容易实现了!!
建议增加支持:%~dp1、%~n1等形式。


呵呵,会增加处理的难度,有必要再加.目前可以先用WENV来处理.
回复

使用道具 举报

248#
 楼主| 发表于 2010-12-12 12:32:10 | 显示全部楼层
原帖由 zhaohj 于 2010-12-12 12:09 发表
批处理里面使用wenv for是否有问题。

我测试无法在批处理中使用wenv for命令

今天有空想把SRSF6中没有菜单的LST文件改成批处理文件,无法实现。下面生成(fd1)/PCI

!BAT
echo
echo
echo SRSID.TXT  ...


谢谢你的反馈报告,有没有更详细的资料?

或者弄一个最简易的可以重现问题的文档上来..


不知是错觉还是....
发现zhaohj的BUG报告越来越简单了,呵呵....

以前我时间比较多,可以通过自己去慢慢测试然后再发现问题.
现在时间比较少了....

呵呵,越详细的报告越容易直接看出问题所在.而不用再花时间去做详细测试.
回复

使用道具 举报

249#
 楼主| 发表于 2010-12-12 15:24:41 | 显示全部楼层
嗯,看到这个截图我就明白了.
谢谢zhaohj.

又找到了一个GRUB4DOS的BUG.
回复

使用道具 举报

250#
 楼主| 发表于 2010-12-12 16:21:31 | 显示全部楼层
好像很早的版本就已经解决了?

你可以再确认一下,我自己测试是正常的.
回复

使用道具 举报

251#
 楼主| 发表于 2010-12-12 22:32:03 | 显示全部楼层
再试试我刚刚上传最新版...

之前的版本是有区分大小写的.最新上传的版本不再区分大小写.
回复

使用道具 举报

252#
 楼主| 发表于 2010-12-12 22:45:42 | 显示全部楼层
使用的是UTC标准时间.我的LINUX忘了改时区了.

卸载所有,嗯,下次再加.delmod *
回复

使用道具 举报

253#
 楼主| 发表于 2010-12-13 16:40:55 | 显示全部楼层
@tuxw
嗯.这也是WENV原版的BUG,没有考虑到这个情况.
回复

使用道具 举报

254#
 楼主| 发表于 2010-12-17 00:32:45 | 显示全部楼层
原帖由 tuxw 于 2010-12-16 22:13 发表
这个问题应该由grldr处理,不要将非参数的%%替换成%。
wenv是无能为力的,因为执行命令时命令行已经被grldr替换过了,wenv不可能猜测用户的原始命令再将%再替换成%%,那样会引出更多的问题,如何知道用户需要的 ...


呵呵,GRLDR的批处理同样不可能正确猜测用户的命令行%n到底是应该替换成参数呢,还是不替换.
虽然可以做到不符合参数条件的不处理,但因为这个参数条件是多样的.处理起来很麻烦.
符合条件的字符组合.
%,0-9,d,p,n,x,~

为了避免意外,还是由用户去处理.
程序不是万能的,但用户是万能的,所以把这个问题丢给用户去处理是最完美的.

如果要在批处理中使用%,除非明确它是一个批处理参数,否则最好是换成%%.
回复

使用道具 举报

255#
 楼主| 发表于 2010-12-17 13:07:34 | 显示全部楼层
/* The flags for the builtins.  */
#define BUILTIN_CMDLINE                0x1        /* Run in the command-line.  */
#define BUILTIN_MENU                        (1 << 1)/* Run in the menu.  */
#define BUILTIN_TITLE                (1 << 2)        /* Only for the command title.  */
#define BUILTIN_SCRIPT                (1 << 3)/* Run in the script.  */
#define BUILTIN_NO_ECHO                (1 << 4)        /* Don't print command on booting. */
#define BUILTIN_HELP_LIST        (1 << 5)/* Show help in listing.  */
#define BUILTIN_BOOTING                (1 << 6)        /* The command is boot-sensitive.  */
#define BUILTIN_BAT_SCRIPT        (1 << 7)
#define BUILTIN_USER_PROG        (1 << 8)

if (flags & BUILTIN_BAT_SCRIPT)
目前是在运行批处理
回复

使用道具 举报

256#
 楼主| 发表于 2010-12-18 11:17:48 | 显示全部楼层
这不是call的问题..

注意GRUB4DOS批处理里面的CALL和WENV的CALL不要混在一起.

想要使用变量就必需用wenv

你可以试试

wenv call call :test ${a}
回复

使用道具 举报

257#
 楼主| 发表于 2011-1-1 00:47:50 | 显示全部楼层
这是正常的,除非使用过滤手段过滤掉。过滤后面以~x结尾的,但是有可能会把一些本来就是以~x结尾的给过滤了。

[ 本帖最后由 chenall 于 2011-1-1 00:49 编辑 ]
回复

使用道具 举报

258#
 楼主| 发表于 2011-1-2 23:09:12 | 显示全部楼层
原帖由 2010aetom 于 2011-1-2 22:30 发表
菜鸟完全看不明白,看来要看到憔悴,或许才能参透一二吧


这个本来就不是设计给菜鸟用的。
回复

使用道具 举报

259#
 楼主| 发表于 2011-1-19 12:20:10 | 显示全部楼层
WENV内部都是区分大写不区分小写的..

即如果你输入的是小写则不区分大小写,如果你输入的是大写就有区分大小写..

你只要全部用小写就可以保证不区分大小写了,这个要求很简单吧.
回复

使用道具 举报

260#
 楼主| 发表于 2011-1-23 13:57:05 | 显示全部楼层
不支持,你可以使用输出重定向把命令输出到一个临时的文件或内存中。
再进行分析。
回复

使用道具 举报

261#
 楼主| 发表于 2011-4-21 17:26:16 | 显示全部楼层
1.确定是使用我的版本。
2.确定是最新版本。

使用wenv不带参数可以获取版本信息。。。。

最新版本的WENV下载
http://grubutils.googlecode.com
回复

使用道具 举报

262#
 楼主| 发表于 2011-4-22 11:11:01 | 显示全部楼层

回复 #1063 2011886 的帖子

这个你可以自己变通,比如以下命令,文件未找到时就只会提示File not found,而不会中止运行了。
wenv dir *.iso || echo File not found
需要转向也是一样的
wenv dir *.iso > (md)0x300+1  || echo File not found
回复

使用道具 举报

263#
 楼主| 发表于 2011-5-18 13:51:37 | 显示全部楼层
@tuxw
你可以尝试为WENV添加一个SHELL,由SHELL处理WENV可以处理的问题,不能处理的再丢给GRUB4DOS。

这样一来WENV就是一个增强型的SHELL。

另外关于?_WENV的位置
我主要是为了编程方便快速,所以才直接使用60开始。这样可以减少判断,也省几个语句。


如获取pause命令的按键
wenv call pause input=
wenv echo chr(${?_WENV}) | set key=
if /i %key%=="y" && do something ...

set /P:N 可以实现相同的功能,但这个要按回车,输入可能是多个字符(必须是可见字符),要做额外的判断
用 pause 获取单键输入的好处是可以不用按回车,可以任意键跳过

这个直接使用内置的功能(非set)也可以实现的.
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=193054&page=6#pid2226293

[ 本帖最后由 chenall 于 2011-5-18 13:58 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-9 09:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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