无忧启动论坛

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

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

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

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

使用道具 举报

发表于 2011-1-2 22:30:17 | 显示全部楼层
菜鸟完全看不明白,看来要看到憔悴,或许才能参透一二吧
回复

使用道具 举报

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


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

使用道具 举报

发表于 2011-1-9 17:42:39 | 显示全部楼层
看来要向着BASIC靠拢
回复

使用道具 举报

发表于 2011-1-19 11:29:15 | 显示全部楼层
@tuxw:
wenv dir -c 参数是否有问题,目前文件名大小写无法区别

@chenall:
希望dir 后面文件名没大小写之分

[ 本帖最后由 zhaohj 于 2011-1-19 11:44 编辑 ]
Snap1.jpg
回复

使用道具 举报

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

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

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

使用道具 举报

发表于 2011-1-19 12:31:26 | 显示全部楼层
原帖由 chenall 于 2011-1-19 12:20 发表
WENV内部都是区分大写不区分小写的..


这样就好,想不到这个规则适用在这里。
回复

使用道具 举报

发表于 2011-1-23 13:03:09 | 显示全部楼层
看了一下 翻了几页
不知道能不能支持 FOR /F ["options"] %variable IN ('command') DO wenv-command
回复

使用道具 举报

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

使用道具 举报

发表于 2011-4-20 17:20:52 | 显示全部楼层
原帖由 zhaohj 于 2011-1-19 11:29 发表
@tuxw:
wenv dir -c 参数是否有问题,目前文件名大小写无法区别

@chenall:
希望dir 后面文件名没大小写之分


希望dir 模仿DOS的dir命令(比如 wenv dir (bd)/*.iso),没有找到文件时不要出异常,返回空就行了,这个异常。。折腾人啊!!!

[ 本帖最后由 2011886 于 2011-4-20 17:59 编辑 ]
回复

使用道具 举报

发表于 2011-4-20 18:09:11 | 显示全部楼层
原帖由 chenall 于 2011-1-19 12:20 发表
WENV内部都是区分大写不区分小写的..

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

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


这个要求一点都不简单,我只想返回当前目录下的所有.ISO文件 和  .iso 文件,我该怎么写?

如果写两遍输出到内存,总会有一个失败直接跳出,如果写一遍小写的话,看下图,大写的文件名根本不认!!

无标题.jpg
回复

使用道具 举报

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

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

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

使用道具 举报

发表于 2011-4-21 18:16:08 | 显示全部楼层
原帖由 chenall 于 2011-4-21 17:26 发表
1.确定是使用我的版本。
2.确定是最新版本。

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

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


哇,你太伟大了,新版一切OK,只希望你出下一版的时候把文件未找到异常去掉,返回空就可以了,不然我的动态加载ISO,当用户没有放置任何ISO的时候直接出错,连生成默认菜单的机会都没有
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2011-5-16 02:36:10 | 显示全部楼层
原帖由 zhaohj 于 2011-1-19 11:29 发表
@tuxw:
wenv dir -c 参数是否有问题,目前文件名大小写无法区别


那个错误是 ls 命令产生的,只是一个提示,实际并不是出错了

-c  是强制大小写敏感(默认是不区分大小写的),指定了 -c 时大小必须完全匹配(不指定 -c 时跟 chenall 的版本是一样的)
所以用 *.SY? 是列不出小写扩展名文件的

设计这个参数的目的是是为了过滤出小写的文件名(默认情况下如果文件名小写没法将大写文件名排除)
回复

使用道具 举报

发表于 2011-5-18 10:49:01 | 显示全部楼层
2010-12-25
     dir 命令设置 ?_WENV 为列表文件数
     增加 chr(*) 转换ascii码为字符,开关 DIS_CHR=on 禁止该特性
     增加 ascii(*) 转换字符为ascii码,开关 DIS_ECHAR=on 禁止该特性
2011-05-18
    ?_WENV 放在固定位置,避免与内置变量功能互相清除
    其它细节调整适应内置set命令的新版grub4dos
    添加编译日期
    echar(*), ascii(*) 允许最大字符数64个
    允许用 if 替换 check 命令

很久没关注grub4dos,最近整一个相关的东西,发现wenv与内置set命令后的grub4dos有些冲突,作了些调整适合新版,顺便更新些细节。
主要是?_WENV的位置,原版固定放在变量60的位置,我为了修改内置变量数目方便,将它放在最后一个名字位置,内置变量从后往前使用,记得以前与chenall勾通过这一点但没有达成共识,这会造成交替使用两个版本的wenv时反复初始化。如果仅仅是外部命令,这不是个大问题,但grub4dos内置set命令后问题就大了,我注意到chenall为了兼容这个问题,在变量区放了2个?_WENV来解决初始化的问题,但这个造成?_SWITCH不能正常初始化。现在执行 wenv reset ?* 时会清掉变量区多余的那个 ?_WENV。

另外修改版的WENV最大可能会使用到5个内置变量,现在原版增了一个内置变量 ?_UUID 的使用,这样有可能导致内置变量区不够用,此时请用 wenv reset ?* 清除内置变量

新增加的 chr, ascii 有一些小的用途,不是很常用,但要用到时会比较方便

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

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

ASCII串转U串
set a=abc123
wenv echo ascii(%a%) | set a=
wenv set a=${a!0x=\0\x}
set a=%a:~2%\0
此时 a=\x61\0\x62\0\x63\0\x31\0\x32\0\x33\0

wenv-tuxw-2011-05-18.zip (76.08 KB, 下载次数: 45)
回复

使用道具 举报

 楼主| 发表于 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 编辑 ]
回复

使用道具 举报

发表于 2011-5-18 14:43:40 | 显示全部楼层
另外实现一个shell的话比较麻烦而且是重复开发(非除想实现比较特别的功能),因为独立shell的工作模式不同,在用户接口方面它始终在前台,这在兼容性方面可能会出现问题,不兼容的地方用户会不习惯而拒绝使用那开发就没有意义,可能还要经常跟进grub4dos的更新。
这个由grub4dos来做的话工作量要小很多,只需要在处理 "Warning! No such command: ..." 时将命令行参数交给 %ComSpec% 就行了,而外部命令并不需要编写任何代码,是个通用的方法,每个外部命令都可以成为shell。
shell 的问题不重要先不管了,目前还没想出它有什么更多的好处,就是写外部命令时可省一个wenv,或者以后觉得有必要了再弄吧。

原帖由 chenall 于 2011-5-18 13:51 发表
...这个直接使用内置的功能(非set)也可以实现的.
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=193054&page=6#pid2226293


嗯,这样当然也可以。实现 chr 和 ascii 二个伪函数就是图个方便,不用知道ascii码,直接转换为可见字符用 if 的 /i 参数只需要比较一次。

cat --length=1 --skip=0x100 (md)0x265+1 | set JX=
if /i "%JX%"=="y" && exit
if /i "%JX%"=="n" && goto :end
这个方法存在几个“魔数”对用户不够友好(老实说我看到这个前也不知道pause将返回值放在哪个地址的),新人会忘而却步,读“高人”写的菜单时需要对grub4dos内部较为熟悉才能读懂,而目前grub4dos恰恰缺少这方面的文档。

其实对grub4dos功能较熟悉的人来说,,通过(rd)和(md)的变换操作,wenv 的几乎所有功能都可以通过命令组合来实现,只某些功能实现起来麻烦点而已。

[ 本帖最后由 tuxw 于 2011-5-18 14:50 编辑 ]
回复

使用道具 举报

发表于 2011-5-19 22:13:13 | 显示全部楼层
2011-05-19
     find 命令-end参数不再输出结果到内置变量?_WENV(已有外部命令inifile)
     set 命令增加参数 -u -l -p, 同内置命令/u /l /p(没有 :N 延时),仍支持$u/l(新参数优先)
    check/if  命令增加参数 -i 忽略大小写(原来的右边小写左边不分在大小写的方法不好记忆,不再支持),去掉 -ee(-e扩展为操作两边同时转义)
    check/if  修复了一个字符串大小比较的BUG
    check/if  在 debug 3 时显示详细信息

check 中引号的用法原版的兼容性问题导致感觉用法复杂,其实所谓“紧凑语法”与“非紧凑语法”用文字描述觉得不易理解,用一个例子就能看明白
它们之间的区别是:紧凑语法时,引号会被去掉,还原出原始的比较对象
下面的例子要在 debug 3 时才能看到详细信息
Test-2011-05-19-21-40-22.png

引号特别处理的另一个作用是允许比较对象中间含有引号、空格
如果仅仅是防止对象为空导致语法出错,在比较对象前/后加上任意字符都可以

[ 本帖最后由 tuxw 于 2011-5-19 23:08 编辑 ]

wenv-tuxw-2011-05-19.zip

76.72 KB, 下载次数: 44, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2011-5-19 23:07:10 | 显示全部楼层
@tuxw:
好久不见终于归队!

自从内置命令增强后,WENV已经很少用了,除了for命令。其实FOR也可以用P处理来解决。
------
debug 0|1|2,没见过debug 3 啊?
回复

使用道具 举报

发表于 2011-5-19 23:13:38 | 显示全部楼层

回复 #1070 zhaohj 的帖子

debug N
最初,N大于等于1,基本上相当于on。
最近,开发者们逐渐给予了一些拓展:
debug 2
debug 3
赋予了一些特别的功能。
以后,或许会有更多的……

[ 本帖最后由 zxw 于 2011-5-19 23:23 编辑 ]
回复

使用道具 举报

发表于 2011-5-19 23:27:35 | 显示全部楼层
关于P处理的单步跟踪问题:
在批处理运行之前,执行debug on来开启P处理的单步跟踪。

问题:
比如我只有一个P处理,不返回命令行的情况下,怎么达到单步跟踪?
回复

使用道具 举报

发表于 2011-5-19 23:36:39 | 显示全部楼层
应该还是debug on吧
回复

使用道具 举报

发表于 2011-5-19 23:37:52 | 显示全部楼层
@zhaohj
前一段时间连续做两个新项目,几乎封闭了,很少关注业余的爱好了

debug 0|1|2 比较常用,实际上你 debug 99 也是可以的

内置变量功能后,wenv的功能很多都重复了,本来想做一些重复功能精简,但考滤兼容性问题就不改了
有些增强的功能用wenv还是要方便的,比如
字符串替换与#/%的截取
操作内置变量(%?_WENV%这样是不能访问的)
数值/大小比较、子串查找
精确计算,内置calc有个不严重的BUG,除法返回32位的有效值(注意不是返回整型,实际上是64位只有32位有效,用变量时不要紧,写入内存时会表现出来)
wenv getdev d1
wenv calc *0x829c=*0x829c/1
wenv getdev d2
calc *0x829c=*0x829c/1 (这里因为只有32位有效,会将82A0修改为0)
wenv getdev d3
wenv setdev d1
set
这样看得到的3个d值,calc 意外的修改了内存,这个因为操作内存的人比较少,没有突出表现出来,严格的说是一个很严重的BUG
回复

使用道具 举报

发表于 2011-5-19 23:43:06 | 显示全部楼层
原帖由 zxw 于 2011-5-19 23:36 发表
应该还是debug on吧


没用的,批处理内部是无法控制调试状态的。
目前只有批处理再调用批处理。

所以,我认为P处理的单步跟踪,不要使用debug on,或采用debug 3以上比较好。

[ 本帖最后由 zhaohj 于 2011-5-19 23:46 编辑 ]
回复

使用道具 举报

发表于 2011-5-24 11:23:37 | 显示全部楼层
发现一个bug,下面文件内容:
[Config.iaStor]
value = "", tag, REG_DWORD, 1b
value = "", ErrorControl, REG_DWORD, 1
value = "", Group, REG_SZ, "SCSI Miniport"
value = "", Start, REG_DWORD, 0
value = "", Type, REG_DWORD, 1

WENV  for /f "eol=; delims=" %i in ( ${OEMFILE} ) do echo %i > (rd)+1
我的目的是清除多余的注释行,结果发现生成的结果变成:
[Config.iaStor]
value = ", tag, REG_DWORD, 1b
value = ", ErrorControl, REG_DWORD, 1
value = ", Group, REG_SZ, "SCSI Miniport"
value = ", Start, REG_DWORD, 0
value = ", Type, REG_DWORD, 1

现在还是采取简单办法:
cat --locate=\x22 --replace=\x21 %OEMFILE%
到时再变回来。

[ 本帖最后由 zhaohj 于 2011-5-24 11:25 编辑 ]
回复

使用道具 举报

发表于 2011-5-24 12:25:35 | 显示全部楼层
我测试好象是正常的
Test-2011-05-24-12-21-18.png

这两天更新了几个小问题,没有涉及过for命令,有可能跟相关的字符串函数有关系。你用新版试一下
    修正 dir 最后一个通配符不能匹配空字符的BUG  (dir file*  不能匹配  file)
    修正 check 将数字开头的字符串当数值比较的BUG
    dir 列表适应新版grub4dos里带 \空格 的名字
    dir 列表没有文件时, 不显示 Error 15 错误
    修正 dir 列表没有文件时, ?_WENV不会置0的BUG

[ 本帖最后由 tuxw 于 2011-5-24 12:30 编辑 ]

wenv-tuxw-2011-05-23.zip

79.13 KB, 下载次数: 74, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2017-1-20 07:49:44 | 显示全部楼层
chenall 你所提供下载地址已经失效

点评

wenv 已经过时,不再使用了。目前的外部命令都不需要 wenv 了。  详情 回复 发表于 2017-1-20 21:22
回复

使用道具 举报

发表于 2017-1-20 21:22:32 | 显示全部楼层
2010DOS622 发表于 2017-1-20 07:49
chenall 你所提供下载地址已经失效

wenv 已经过时,不再使用了。目前的外部命令都不需要 wenv 了。

点评

wenv外部命令好像不能完全被取代,比如变量里面的字符串截取功能,内置命令好像就做不到? chenall的网址已经打不开了。友情重新分享下。@chenall  详情 回复 发表于 2021-2-10 16:30
回复

使用道具 举报

发表于 2021-2-10 16:30:53 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-2-10 16:33 编辑
不点 发表于 2017-1-20 21:22
wenv 已经过时,不再使用了。目前的外部命令都不需要 wenv 了。

        wenv外部命令好像不能完全被取代,比如变量里面的字符串截取功能,内置命令好像就做不到?

chenall的网址已经打不开了。友情重新分享下。@chenall


tuxw修改版本的wenv好像也很强大。


点评

能不能举个例子? 我看看可不可以单独写个外部命令。  详情 回复 发表于 2022-2-25 09:19
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 00:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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