无忧启动论坛

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

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

  [复制链接]
61#
发表于 2010-10-6 13:54:18 | 显示全部楼层
++、--目前是否有问题?
加减乘除与或(左右)移位操作正常

[ 本帖最后由 zhaohj 于 2010-10-6 14:04 编辑 ]

Snap1.jpg (41.41 KB, 下载次数: 48)

Snap1.jpg
回复

使用道具 举报

62#
发表于 2010-10-6 15:43:37 | 显示全部楼层
++ --干脆全取消算了,现在有点乱。${var}++与${var}+1没区别。

字符串处理已经够用了,文本处理要再增加功能。

[ 本帖最后由 zhaohj 于 2010-10-6 16:05 编辑 ]
回复

使用道具 举报

63#
发表于 2010-10-7 07:57:08 | 显示全部楼层
自增/自减现在这样比较符合习惯。
回复

使用道具 举报

64#
发表于 2010-10-7 19:03:04 | 显示全部楼层
字符串处理希望有检测字符串长度(<512字节);
如WENV set a=abcd1234
WENV calc length=$${a},  或WENV calc length=L${a},  得到length=8

文本文件最希望实现>>功能,即 append
比如我们存在一个可写的1M文本文件,write --offset=0 (fd0)/1.txt abcd1234\n\r
但我们要接着写入一行,不知怎么写?所以最希望有write --append ,DOS中的>>
另,文本文件的字符串替换

[ 本帖最后由 zhaohj 于 2010-10-7 19:50 编辑 ]
回复

使用道具 举报

65#
发表于 2010-10-8 09:14:37 | 显示全部楼层
看到SRATLF对${VAR:x:y}的用法“从x开始提取y个字符,如果x为负数则从倒数x个开始提取”
他是y值是负数,我测试了一下,这里y和-y结果是相同的。
可否这样:y是正数,从左到右;y是负数,从右到左。

[ 本帖最后由 zhaohj 于 2010-10-8 09:53 编辑 ]

Snap1.jpg (27.92 KB, 下载次数: 42)

Snap1.jpg
回复

使用道具 举报

66#
发表于 2010-10-8 09:55:45 | 显示全部楼层
你上面是X,我是指Y值
${var:x:y}
或者不允许Y负值

[ 本帖最后由 zhaohj 于 2010-10-8 09:58 编辑 ]
回复

使用道具 举报

67#
发表于 2010-10-8 23:48:46 | 显示全部楼层
我用过一个精简版的VM,在家里的电脑,文件名及路径一定要大写,不然就"File not found”

遇到错误时,要先学会排查:
1)尽量使用标准的写法,如路径及文件名全大写,上面可以加一句wenv set path=$u,${path}
2)语法要标准,象wenv run find --set-root ${path}  (fd0)没这个写法,(fd0)多余;
3)在错误处,看一下:
wenv          命令是否有效
command    查看外部命令路径
root            查看当前设备是什么
回复

使用道具 举报

68#
发表于 2010-10-9 00:01:57 | 显示全部楼层
原帖由 chenall 于 2010-10-8 23:37 发表
现在的check命令就是相当于if了。
注: check后面可以接一个wenv支持的命令(这样可以省去一次加载WENV的过程),也可以不接(就和以前的版本一样).
...


这个“IF”功能很有价值。

下面这句话又看不懂了,C大解释下
5.添加内置变量?_GET用于GET命令,存放的时变量的长度。
回复

使用道具 举报

69#
发表于 2010-10-9 00:14:47 | 显示全部楼层
这个readme不难写,因为都有现成的,如果没有人写那我来代笔。

不过最好等新版稳定了,万一又变...
回复

使用道具 举报

70#
发表于 2010-10-9 00:18:29 | 显示全部楼层
原帖由 chenall 于 2010-10-9 00:08 发表


呵呵,就是你前面想要的获得变量长度的功能啊。
例子:
wenv set a=1234567
wenv get a
wenv run echo a have ${?_GET} letters

也就是使用wenv get以后就可以用变量${?_GET}来获得它的长度。
注: ...


有这个变量,以后基本可以Append了。
回复

使用道具 举报

71#
发表于 2010-10-9 08:19:25 | 显示全部楼层
${VARIABLE:X:-Y}从左到右(从0开始计数),从x开始提取,倒数y个字符不要;
${VARIABLE:-X:-Y}从倒数x个字符开始(从1开始计数),倒数Y个字符不要;如果y>=x,则为空。

测试正常
${?_GET}测试正常

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

Snap1.jpg (24.49 KB, 下载次数: 50)

Snap1.jpg

Snap2.jpg (17.82 KB, 下载次数: 53)

Snap2.jpg

Snap3.jpg (42.33 KB, 下载次数: 57)

初步实现了append

初步实现了append

Snap4.jpg (49.48 KB, 下载次数: 56)

Snap4.jpg
回复

使用道具 举报

72#
发表于 2010-10-9 12:19:40 | 显示全部楼层
今天抽空写了下WENV的README.TXT,望大家补充:
一:变量赋值
   WENV set VAR=[$|L,][$input,][STRING]
   VAR:变量名,不超过8个字符,首字符必须是"a_z"/"A_Z"/"_"开始,除首字符外允许"0~9"数字;
        变量名区分大小写;
   $U,全转变为大写;
   $L,全转变为小写;
   $input,从键盘输入;
   STRING,提示;
   注:所有参数不区分大小写;
   变量值不能超过512个字节,最多允许自定义64-1个变量.
   如:1)根据提示从键盘输入,全转为大写后保持给srspath变量
         WENV set srspath=$u,$input,please input SRS driver path:
       2)设置变量a,并把值全转为大写
         WENV set a=ABCDabcd1234
         WENV set a=$u,${a}
         得到a=ABCDABCD1234
       3)清除某个变量
         WENV set a=        =后为空,清除变量a
       4)清除某些字符开头的所有变量
         WENV reset a*      清除a开头的所有变量
         WENV reset sr*     清除sr开头的所有变量
       5)清除所有变量
         WENV reset
二:字符串运算
   1: ${VAR:X:Y}
    提取第X个字符后面的Y个字符,如果X为负数则从倒数第X个开始提取Y长度的字符;
    如果Y的值为空则提取第X个字符后面的所有有字符;
    如果Y的值为负数,则去掉倒数Y个字符;
    WENV set a=ABCDabcd1234
    WENV set b=${a:4:4}     得到b=abcd
    WENV set b=${a:-8:4}    得到b=abcd
    WENV set b=${a:4:-4}    得到b=abcd
    WENV set b=${a:-8:-4}   得到b=abcd
   2: ${VAR#STRING}
    提取STRING字符串后面的内容,从左往右第一个位置开始
    WENV set a=ABCD;abcd;1234
    WENV set b=${a#;}       得到b=abcd;1234
   3: ${VAR##STRING}
    提取STRING字符串后面的内容,从右往左第一个位置开始
    WENV set a=ABCD;abcd;1234
    WENV set b=${a##;}      得到b=1234
   4: ${VAR%STRING}
    提取STRING字符串前面的内容,从右往左第一个位置开始
    WENV set a=ABCD;abcd;1234
    WENV set b=${a%;}       得到b=ABCD;abcd
   5: ${VAR%%STRING}
    提取STRING字符串前面的内容,从左往右第一个位置开始
    WENV set a=ABCD;abcd;1234
    WENV set b=${a%%;}       得到b=ABCD

三:字符串或数值比较
    WENV check ${a} OPERATOR ${b}
    OPERATOR:==、<>、>=、<=
    如:WENV set a=abc
        WENV check ${a}==abc && echo ${a}=abc
        WENV calc a=123
        WENV check ${a}==123 && echo ${a}=123
        WENV check ${a}<=150 check ${a}>=100 && echo ${a}>=100.and.${a}<=150
    上面实现了IF语句功能.
    注: 注意比较时,后面的字符串忽略小写对比.
    如:
    abc==ABC 值为真
    aBc==abc 值为假
    abc==aBc 值为真.
    只要前面部分某个字符是大写,后面部分对应的一定要大写才能匹配

四:数值运算
    WENV calc [[VAR | INTEGER]=] INTEGER OPERATOR [INTEGER]
    =前面如果是一个非数字字符串,则会把计算结果赋值给变量;
    OPERATOR:包含+、-、*、/、&(与)、|(或)、^(位异或)、>>、<<
    *INTEGER表示内存地址的值;
    如:
    WENV calc a=*60000+1   表示把内存地址0x60000的值再加1赋值给变量a
    WENV calc a=1<<10      左移10位,即2的10次方,等于1024
    WENV calc a=b++         a=b,b=b+1
    WENV calc a=++b         b=b+1,a=b
    WENV calc a=b--         a=b,b=b-1
    WENV calc a=--b         b=b-1,a=b
    ++、--只能用在=右边.

五:命令序列依次执行
    WENV read FILE

六:执行内置命令
    WENV run COMMAND
    如:
    WENV set imgpath=/SRS_f6/srs_f6.IMG
    WENV set imgpath=$u,${imgpath}
    WENV run map --mem ${imgpath} (fd0)
    map --hook

    可以动态执行命令,如:
    write (md)0x300+1 map --status\0
    WENV run *0x60000

    run可以连续运行多条内部命令,命令与命令之间使用以下字符隔开
    ]]]  无条件执行
    ]]&  当前一条命令返回真时执行后面的语句.否则直接返回
    ]]|  当前一条命令返回假时执行后面的语句.否则直接返回.

七:显示变量值
    WENV get [VAR]
    如:WENV set a=img
        WENV get a    显示变量a及值
        WENV get      显示所有变量及值
    内部变量?_GET
    ?_GET这个内部变量定义了WENV get VAR的变量值长度(字节数)
    如:WENV set a=abcdABCD1234
        WENV get a && WENV calc len=${?_GET}  得到len=12

[ 本帖最后由 zhaohj 于 2010-10-10 16:35 编辑 ]

wenv使用说明.rar

1.7 KB, 下载次数: 58, 下载积分: 无忧币 -2

回复

使用道具 举报

73#
发表于 2010-10-9 14:14:53 | 显示全部楼层
5: ${VAR%%STRING}
    提取STRING字符串前面的内容,从左往右第一个位置开始
    WENV set a=ABCD;abcd;1234
    WENV set b=${a%%;}       得到b=ABCD

以前少写了个%,已修正。
回复

使用道具 举报

74#
发表于 2010-10-9 23:23:18 | 显示全部楼层
忽略以":"开头的行,这个能不能自定义,很多文本的注释是以"#"开头的。

“for /L $i IN ( file ) DO wenv-command,目前do后面只能执行一个命令。”因为大多时候读取文件的目的,是需要每项数据进行字符串处理等相关操作,最需要像do  ...enddo的命令集。
回复

使用道具 举报

75#
发表于 2010-10-9 23:58:48 | 显示全部楼层
chkpci -c:01 /SRSID.TXT
SRSID.TXT内容如下:
PCI$
$PCI\VEN_103C&DEV_1028=AFCNT
...
硬件匹配后会显示这行的,输出还是匹配的这行$PCI\VEN_103C&DEV_1028=AFCNT
chkpci -c:01 /SRSID.TXT | WENV set id=

一般情况下只会匹配一行,或没有。
回复

使用道具 举报

76#
发表于 2010-10-10 01:18:24 | 显示全部楼层
read 命令支持参数,一下没有看懂,举例说明一下。
回复

使用道具 举报

77#
发表于 2010-10-10 13:08:07 | 显示全部楼层
2). for /L $i IN ( file ) DO wenv-command
应该是:
     for /f $i IN ( file ) DO wenv-command
回复

使用道具 举报

78#
发表于 2010-10-10 16:34:01 | 显示全部楼层
变量的清除补充了一点,新加的命令如for就交给你处理了。
一:变量赋值
   WENV set VAR=[$[U]|L,][$input,][STRING]
   VAR:变量名,不超过8个字符,首字符必须是"a_z"/"A_Z"/"_"开始,除首字符外允许"0~9"数字;
        变量名区分大小写;
   $U,全转变为大写;
   $L,全转变为小写;
   $input,从键盘输入;
   STRING,提示;
   注:所有参数不区分大小写;
   变量值不能超过512个字节,最多允许自定义64-1个变量.
   如:1)根据提示从键盘输入,全转为大写后保持给srspath变量
         WENV set srspath=$u,$input,please input SRS driver path:
       2)设置变量a,并把值全转为大写
         WENV set a=ABCDabcd1234
         WENV set a=$u,${a}
         得到a=ABCDABCD1234
       3)清除某个变量
         WENV set a=        =后为空,清除变量a
       4)清除某些字符开头的所有变量
         WENV reset a*      清除a开头的所有变量
         WENV reset sr*     清除sr开头的所有变量
       5)清除所有变量
         WENV reset
回复

使用道具 举报

79#
发表于 2010-10-10 23:20:17 | 显示全部楼层
原帖由 chenall 于 2010-10-10 17:44 发表
为了简化程序统一处理,准备修改一下*的定义。

新的将使用以下方案之一代替,如果明确要读取的是字符则再加一个$符号。
*ADDR还是读取一个数值(这个比较常用)

1.处理速度比较快
*ADDR 读取的是一个数 ...


我认为把变量名区分开比较直观:
字符串变量用$表示,如a$、B$
非字符串变量,后面不加$。
回复

使用道具 举报

80#
发表于 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, 下载次数: 71)

Snap1.jpg

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

而这样是对的

而这样是对的
回复

使用道具 举报

81#
发表于 2010-10-11 10:16:11 | 显示全部楼层
应该是现在最新的版本,因为加了群集命令( ),

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

Snap3.jpg
回复

使用道具 举报

82#
发表于 2010-10-11 10:40:19 | 显示全部楼层
这个版本还不稳定,错误较多。

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

Snap1.jpg
回复

使用道具 举报

83#
发表于 2010-10-11 11:17:00 | 显示全部楼层
wenv read file不正常,这个模块可能引用的地方较多吧

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

Snap1.jpg
回复

使用道具 举报

84#
发表于 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支持命令序列,意义重大。
回复

使用道具 举报

85#
发表于 2010-10-12 09:27:28 | 显示全部楼层
简单的命令序列测试,下面不知错在哪里?

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

Snap1.jpg
回复

使用道具 举报

86#
发表于 2010-10-12 10:51:36 | 显示全部楼层
下面这样还是不行

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

Snap2.jpg
回复

使用道具 举报

87#
发表于 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, 下载次数: 47)

Snap2.jpg
回复

使用道具 举报

88#
发表于 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, 下载次数: 47)

Snap1.jpg

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

Snap2.jpg

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

Snap3.jpg
回复

使用道具 举报

89#
发表于 2010-10-12 13:32:13 | 显示全部楼层
文件分隔options:tokens delims测试正常

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

Snap2.jpg
回复

使用道具 举报

90#
发表于 2010-10-12 17:37:11 | 显示全部楼层
发觉FOR DO不支持字符"
如wenv set a="lsi_sas"
这样成立wenv (set a=${a#"} ; set a=${a%"})

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

Snap3.jpg (120.14 KB, 下载次数: 53)

Snap3.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-20 23:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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