无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
无忧启动论坛唯一网址:bbs.wuyou.net系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
楼主: zhaohj

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
 楼主| 发表于 2010-11-7 11:02:29 | 显示全部楼层
下面有可能出现溢出:
:查找下一个可能的段
WENV calc _ini_tmp=_ini_s1+${_ini_sc,?}+2
debug 0
WENV call cat --skip=${_ini_tmp} --locate=[ ${_ini_fn}
debug 1
WENV calc _ini_cnt=${?_WENV}
Snap1.jpg
回复

使用道具 举报

 楼主| 发表于 2010-11-7 11:12:03 | 显示全部楼层
另外,不知道--locate-align=A是什么意思?
输入a=1,2...好像控制输出结果



-------------
还是控制一下长度算了,--length=2048,段长不可能超过2K的。
wenv set _ini_len=2048

cat命令应该加个参数--count=N

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

使用道具 举报

 楼主| 发表于 2010-11-7 11:33:06 | 显示全部楼层
WENV calc _ini_cnt=${?_WENV}
是否有问题,找到1个的情况,这个变量也不存在。wenv的bug?

[ 本帖最后由 zhaohj 于 2010-11-7 11:34 编辑 ]
Snap1.jpg
回复

使用道具 举报

 楼主| 发表于 2010-11-7 12:39:19 | 显示全部楼层
重大bug发现:数字9不能用在变量中

[ 本帖最后由 zhaohj 于 2010-11-7 12:41 编辑 ]
Snap1.jpg
回复

使用道具 举报

发表于 2010-11-7 12:52:56 | 显示全部楼层
?_WENV 只有用 call 命令中才会设置为所调用命令的返回值(最近加入check查找命令也影响它)

cat /file                   #不影响 ?_WENV
WENV call cat /file    # 影响 ?_WENV

WENV get 默认不显示内置变量( 用 get ?_WENV 或 get ?* )

数字9不用在变量名中是个BUG,数字范围的 < 判断应该改 <=

[ 本帖最后由 tuxw 于 2010-11-7 12:55 编辑 ]
回复

使用道具 举报

发表于 2010-11-7 12:56:55 | 显示全部楼层
原帖由 zhaohj 于 2010-11-7 11:02 发表
下面有可能出现溢出:
:查找下一个可能的段
WENV calc _ini_tmp=_ini_s1+${_ini_sc,?}+2
debug 0
WENV call cat --skip=${_ini_tmp} --locate=[ ${_ini_fn}
debug 1
WENV calc _ini_cnt=${?_WENV}



这里应该不会溢出, cat 只是被调用并没有任何重定向输出, 调用后 ?_WENV 中是找到的个数。

那个 +2 不要,最初的那个批处理是针对你特定的例子文件,+2用来跳过换行。通用批处理中不能这样做,因为并不有判断后面是否存在换行符。

[ 本帖最后由 tuxw 于 2010-11-7 13:00 编辑 ]
回复

使用道具 举报

发表于 2010-11-7 13:21:36 | 显示全部楼层
增加输出到文件功能, 临时缓冲区用完后变为 rd 文件

WENV set INIFILE=/T1.TXT [Disks] 0x600000
/GETSECT.BAT
dd if=(rd)+1 of=/myfile

GETSECT.rar

835 Bytes, 下载次数: 88, 下载积分: 无忧币 -2

回复

使用道具 举报

 楼主| 发表于 2010-11-7 15:14:08 | 显示全部楼层
WENV set -t _ini_fn=${INIFILE%%[}
WENV set -t _ini_sc=${INIFILE#${_ini_fn}}
WENV check " "<-"${_ini_sc}" (set -t _ini_buf=${_ini_sc#]} ; set _ini_sc=${_ini_sc%% })

你多了一个$,变量值空格会自动删除
dd需要事先建一定大小文件,用FAT

--------------------
很好,测试全面通过!

[ 本帖最后由 zhaohj 于 2010-11-7 15:32 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-11-7 15:38:14 | 显示全部楼层
19#最后一个【】
Snap1.jpg
回复

使用道具 举报

发表于 2010-11-7 15:51:16 | 显示全部楼层
这个问题你要单独运行一下
cat --locate=[HardwareIds......] /TXTSETUP.OEM
看正常否
我测试的结果是这条命令不能正确执行
Error 30:...
可能要请教下 chenall 了

======================
我就是用你#19的副本测试的,为了少打几个字,文件名我改为 T1.TXT 了,但我没有测试种长的带.的段名

关键在多的那个$
$$ 不是 for 命令专用的,复合命令(check/for) 后面跟的集合命令里多次引用的变量,可能被其它命令改变的,也要用$$。

你给出的例子处,一个或二个$都没有问题,但后面有个计算 _ini_s2 的地方必须要用 $$ 的

比如check后面的集合命令
WENV set a=1
WENV set b=1
WENV check ...  (set b=${b}${a} ; set a=$${b}) #执行到第二个set时,b已经改变了,如果用一个$的话,b引用的将是原值

测试
WENV check ...  (set b=${a}${b} ; set a=${b})
红色处分别用1个和2个$运行就可以看出区别了


这个要说清楚的话要讲一下WENV的原理
WENV check ...  (set b=${a}${b} ; set a=${b})

1.没有判断子命令时就进行一次扫描,命令变成
WENV check ...  (set b=21 ; set a=1)  #a使用了b改变前的值
2.进入check子命令后 a,b 的值已经固定了


再看这一个
WENV check ...  (set b=${a}${b} ; set a=$${b})

1.第一次扫描后
WENV check ...  (set b=21 ; set a=${b})  # 双写$就是通知WENV先不要替换这个变量

2.进入check命令, 依次执行
set b=21
set a=${b} #此时再去取变量b的值,就是改变后的值


for命令中需要双写 $$ 原因也是一样的,因为 Do 后的命令可能会执行多次,而其中可能会改变变量的值,下次执行需要读变量的新值,所以不能开始就替换变量。


但单独的集合命令则不需要双写$
WENV (... ; ...)
这种简单命令直接按 ; 分解成多条命令,然后逐条替换变量,执行,所以不需要双写 $

[ 本帖最后由 tuxw 于 2010-11-7 16:16 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-9-21 14:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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