无忧启动论坛

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

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

  [复制链接]
481#
 楼主| 发表于 2010-10-11 00:52:49 | 只看该作者
原帖由 tuxw 于 2010-10-11 00:46 发表
%#的改变我就是改了那个%的默认方向,让它跟#方向统一
我还想增加一个 ${VAR:string:length}


%#
我不建议改动。
因为${}也是按照linux 里面的shell设计的。

%#还是要保持一致。

实际上很好理解啊。

#  删除左边的字符
## 贪婪模式

% 删除右边的字符
%% 贪婪模式

可能是我没有前面的说明没有使用一个比较好理解的语句去介绍这个。
回复

使用道具 举报

482#
发表于 2010-10-11 00:56:22 | 只看该作者
原帖由 chenall 于 2010-10-11 00:52 发表


%#
我不建议改动。
因为${}也是按照linux 里面的shell设计的。

%#还是要保持一致。

实际上很好理解啊。

#  删除左边的字符
## 贪婪模式

% 删除右边的字符
%% 贪婪模式

可能是我没有前面 ...

现在这个说法比较好理解了,那这一点我还是改回来
回复

使用道具 举报

483#
发表于 2010-10-11 01:01:48 | 只看该作者
原帖由 chenall 于 2010-10-11 00:27 发表
额..这次的改动都挺大的...

...
4.set 命令也可以显示变量(按cmd的set命令使用习惯).如果后面没有=,则显示所有以输入的字符开头的变量.

...


这样设计的话,完全可以取消get命令,因为功能比较重复了

就是 set 命令没有后面没有 = 的话,按以前的 get 来执行(除了你那个隐藏的彩蛋需要修改外其它的兼容没问题)

WENV set   显示所有变量
WENV set a 显示变量a
WENV set a* 显示前缀为a 的变量

WENV get a || 判断变量不存在可以用
WENV check 0==?{a}
WENV check ==${a}
之类的命令代替

不过我认为还是将set和get明显区别开较直观, set还是必须要有=

[ 本帖最后由 tuxw 于 2010-10-11 01:07 编辑 ]
回复

使用道具 举报

484#
发表于 2010-10-11 09:26:24 | 只看该作者
下面不知哪里错了?

另外,现在的子命令都容许大写,如
WENV GET
WENV FOR /F
/我认为这点不好,外部命令WENV可以大写,子命令一定要小写,参数不分大小写。set 、for、read 、run一定要小写。

[ 本帖最后由 zhaohj 于 2010-10-11 10:00 编辑 ]

Snap1.jpg (28.48 KB, 下载次数: 123)

Snap1.jpg

Snap2.jpg (22.19 KB, 下载次数: 111)

而这样是对的

而这样是对的
回复

使用道具 举报

485#
发表于 2010-10-11 09:44:41 | 只看该作者

回复 #484 zhaohj 的帖子

我的正常。是否版本不对?

[ 本帖最后由 zxw 于 2010-10-11 09:58 编辑 ]

1.gif (228.88 KB, 下载次数: 101)

1.gif
回复

使用道具 举报

486#
发表于 2010-10-11 10:16:11 | 只看该作者
应该是现在最新的版本,因为加了群集命令( ),

Snap3.jpg (14.91 KB, 下载次数: 98)

Snap3.jpg
回复

使用道具 举报

487#
发表于 2010-10-11 10:30:06 | 只看该作者

回复 #486 zhaohj 的帖子

哦,已更新到这个版本。
又测试了一下,确有这个问题。
回复

使用道具 举报

488#
发表于 2010-10-11 10:40:19 | 只看该作者
这个版本还不稳定,错误较多。

Snap1.jpg (55.22 KB, 下载次数: 98)

Snap1.jpg
回复

使用道具 举报

489#
 楼主| 发表于 2010-10-11 10:58:33 | 只看该作者
嗯,预览版(我自己没有全面测试,只是试了小部份新增的功能)

谢谢你们的测试,麻烦多试试,看看还有没有其它问题。

目前已知问题:
1.WENV命令执行后总是返回失败值。
2.for命令不正常。
回复

使用道具 举报

490#
发表于 2010-10-11 11:17:00 | 只看该作者
wenv read file不正常,这个模块可能引用的地方较多吧

Snap1.jpg (15.16 KB, 下载次数: 98)

Snap1.jpg
回复

使用道具 举报

491#
 楼主| 发表于 2010-10-11 11:49:04 | 只看该作者
wenv read 的文件里面必须是wenv的子命令
要执行GRUB4DOS命令前面还是要加run的。
回复

使用道具 举报

492#
 楼主| 发表于 2010-10-11 14:36:32 | 只看该作者
原帖由 tuxw 于 2010-10-11 01:01 发表


这样设计的话,完全可以取消get命令,因为功能比较重复了

就是 set 命令没有后面没有 = 的话,按以前的 get 来执行(除了你那个隐藏的彩蛋需要修改外其它的兼容没问题)

WENV set   显示所有变量
WE ...


为了在更符合平常的使用习惯,get命令不删除,还是要保留(用于检测或其它功能).
回复

使用道具 举报

493#
 楼主| 发表于 2010-10-11 18:45:19 | 只看该作者
今天的版本已经上传

1.修改了前面提到的两个BUG
2.修改for命令的$i 为%i (因为是仿CMD的FOR命令设计的,所以还是尽量和它保持一致)

字符分隔的处理还没有完工,只完成了注释符设定比如(忽略所有";"开头的行)
wenv for /f "eol=;" %i in ( /test.txt ) do run echo %i\n

像tokens,delims 参数也已经支持,但是目前没有效果(因为还没有对它进行处理)。目前只是支持读取这两个参数。
回复

使用道具 举报

494#
发表于 2010-10-11 23:27:42 | 只看该作者
check 两个连写的用法出错了
最后一条语句在R15以前是 return wenv_func(p2, flags);
新版你改成了 return wenv_func(arg, flags);
目前的版本小问题还比较多

[ 本帖最后由 tuxw 于 2010-10-11 23:29 编辑 ]
回复

使用道具 举报

495#
发表于 2010-10-11 23:30:48 | 只看该作者
for ...do后面现在还不支持命令序列,如:
wenv for /l %i in (1,1,9) do (set a=%i ; run echo ${a}\n})

do支持命令序列,意义重大。
回复

使用道具 举报

496#
 楼主| 发表于 2010-10-12 01:06:38 | 只看该作者
原帖由 zhaohj 于 2010-10-11 23:30 发表
for ...do后面现在还不支持命令序列,如:
wenv for /l %i in (1,1,9) do (set a=%i ; run echo ${a}\n})

do支持命令序列,意义重大。


有支持的,但是语法要求比较严格。; 左右都必须是空格


总算把for命令搞定了。请有条件的朋友进行最后测试。
2010-10-11
   1.添加字命令for(仿cmd模式),三种模式.(注意:语法要求比较严格请按照下面的格式使用)。
     FOR /L %variable IN (start,step,end) DO wenv-command
     FOR /F ["options"] %variable IN ( file ) DO wenv-command
     注:file-set 前后必须有空格
     FOR /F ["options"] %variable IN ("string") DO wenv-command
     注:string前后必须有引号,并且紧跟(),否则都算非法。
     支持的options
          eol=c
          delims=xxx
          tokens=x,y,m-n
    使用方法请参考cmd的for命令.
回复

使用道具 举报

497#
发表于 2010-10-12 09:27:28 | 只看该作者
简单的命令序列测试,下面不知错在哪里?

Snap1.jpg (23.79 KB, 下载次数: 98)

Snap1.jpg
回复

使用道具 举报

498#
 楼主| 发表于 2010-10-12 09:53:46 | 只看该作者
原帖由 zhaohj 于 2010-10-12 09:27 发表
简单的命令序列测试,下面不知错在哪里?


如果你有用过cmd的for命令,应该很容易理解。。。

解决方法见前面的贴子
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=48#pid2057633
回复

使用道具 举报

499#
发表于 2010-10-12 10:06:07 | 只看该作者
你的还好点,我的更奇怪。

1.png (3.19 KB, 下载次数: 104)

1.png

2.png (3.07 KB, 下载次数: 103)

2.png
回复

使用道具 举报

500#
发表于 2010-10-12 10:15:36 | 只看该作者

回复 #498 chenall 的帖子

应该这样?


[ 本帖最后由 zxw 于 2010-10-12 10:22 编辑 ]
回复

使用道具 举报

501#
 楼主| 发表于 2010-10-12 10:43:37 | 只看该作者
原帖由 zxw 于 2010-10-12 10:15 发表
应该这样?
101585


嗯,这个和CMD的处理方法是一样的
只是cmd里面是用%%XX%%的方式。我们简单一点就是$${VARIABLE}

$${VARIABLE}第一次引用时(执行for之前)会变成${VARIABLE},第二次(执行这个语句)就是这个变量的值了。

如果有多重嵌套那可能就需要转义多次这个$符号。像:
$$$${VARIABLE}
回复

使用道具 举报

502#
发表于 2010-10-12 10:51:36 | 只看该作者
下面这样还是不行

Snap2.jpg (39.46 KB, 下载次数: 105)

Snap2.jpg
回复

使用道具 举报

503#
 楼主| 发表于 2010-10-12 11:08:07 | 只看该作者
执行for命令时上面$$会变成如下语句
calc x=1 ; run echo ${a:${x}}\n

执行到run命令时由于目前不支持变量嵌套所以只会扩展变量${x}
要再执行一次才会扩展到${a}

目前和CMD批处理的处理是差不多的,你可以试试按你的方法在CMD里面是否能够得到正确的结果。

试试像下面的
calc x=%i ; run echo $${a:%i}

[ 本帖最后由 chenall 于 2010-10-12 11:13 编辑 ]
回复

使用道具 举报

504#
发表于 2010-10-12 11:18:30 | 只看该作者
嗯,目前变量嵌套不支持。
还发现get命令如wenv get a不显示而wenv get会显示(debug off状态)

变量嵌套支持很重要啊!

[ 本帖最后由 zhaohj 于 2010-10-12 11:46 编辑 ]

Snap2.jpg (36.36 KB, 下载次数: 96)

Snap2.jpg
回复

使用道具 举报

505#
 楼主| 发表于 2010-10-12 11:55:24 | 只看该作者
1.还发现get命令如wenv get a不显示而wenv get会显示(debug off状态)
这是正常的。
但wenv get的主要功能是显示。
而get xxx的主要功能是判断变量是否存在,显不显示无所谓。

2.变量嵌套支持很重要啊!
目前要嵌套变量只要多执行一次就行了。
比如for /l %i in (1,1,1) do xxx

当然了会支持简单的常用嵌套
像 ${a:${b}}之类的。


另外,我准备把一些不重要的显示全部放在debug on状态,免得屏幕失控。

[ 本帖最后由 chenall 于 2010-10-12 11:58 编辑 ]
回复

使用道具 举报

506#
 楼主| 发表于 2010-10-12 12:47:45 | 只看该作者
修正小BUG,顺便把echo作为一个子命令,比如方便使用。

已经上传test2.

现在就可以wenv echo了.如果是run echo那将是执行GRUB4DOS的内置命令ECHO,如果没有这个命令会出错。

另外说一下,for命令是仿CMD的所以可以使用像如下的例子
wenv for /f "tokens=1-8" %i in ("a1 a2 a3 a4 a5 a6 a7 a8 a9") do echo 1:%i 2:%j 3:%k 4:%l
wenv for /f "tokens=5,6" %i in ("a1 a2 a3 a4 a5 a6 a7 a8 a9") do echo 1:%i 2:%j

注意和CMD一样临时变量%i是区分大小写的,但是尽量不要使用超出Z,z的字符,可能会出现意外。

为了灵活使用,不准备限制这个变量可以使用的字符的,比如你还可以这样,都是合法的。
wenv for /f "tokens=5,6" %2 in ("a1 a2 a3 a4 a5 a6 a7 a8 a9") do echo %2 %3
回复

使用道具 举报

507#
发表于 2010-10-12 13:10:44 | 只看该作者
wenv set a=ABCD;abcd;1234
wenv for /l %i in (1,1,6) do (calc b=%i ; set c=$${a:$${b}} ; for /l %j in (1,1,1) do echo $${c}\n)


新版发觉已经支持变量嵌套
wenv for /l %i in (1,1,6) do (calc b=%i ; set c=$${a:$${b}} ; run  echo $${c}\n)

wenv内存的ECHO有问题
wenv for /l %i in (1,1,6) do (calc b=%i ; set c=$${a:$${b}} ; echo $${c}\n)

[ 本帖最后由 zhaohj 于 2010-10-12 13:21 编辑 ]

Snap1.jpg (20.06 KB, 下载次数: 95)

Snap1.jpg

Snap2.jpg (19.94 KB, 下载次数: 93)

Snap2.jpg

Snap3.jpg (22.9 KB, 下载次数: 87)

Snap3.jpg
回复

使用道具 举报

508#
发表于 2010-10-12 13:32:13 | 只看该作者
文件分隔options:tokens delims测试正常

Snap2.jpg (93.33 KB, 下载次数: 113)

Snap2.jpg
回复

使用道具 举报

509#
 楼主| 发表于 2010-10-12 14:17:50 | 只看该作者
原帖由 zhaohj 于 2010-10-12 13:10 发表
wenv set a=ABCD;abcd;1234
wenv for /l %i in (1,1,6) do (calc b=%i ; set c=$${a:$${b}} ; for /l %j in (1,1,1) do echo $${c}\n)


新版发觉已经支持变量嵌套
wenv for /l %i in (1,1,6) do (calc b= ...


@@新版发觉已经支持变量嵌套
还是原来的样子

wenv echo目前不支持转义符(并且默认自动添加回车符)
回复

使用道具 举报

510#
发表于 2010-10-12 14:59:52 | 只看该作者
输出全放在 debug on状态不好,在命令行调试时非常不方便,每次都去改debug状态
还是在normal比较好,在菜单中执行时为了提高速度也不关心屏幕输出可以先debug off,再debugnormal
对于可能引起刷屏的命令for也可以先 debug off

我也正想加个ECHO方便调试,你已加上去了:)

[ 本帖最后由 tuxw 于 2010-10-12 15:01 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 06:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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