无忧启动论坛

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

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

  [复制链接]
241#
发表于 2010-11-22 09:11:13 | 显示全部楼层
原帖由 chenall 于 2010-11-21 19:36 发表
新的GRUB4DOS已经上传.
1.支持PXE文件列表.
2.修正fb_dir的一个bug,现在可以在(ud)上正常使用自动完成功能.
3.对于 > 如果文件小于64KB,则会把文件内容置0.


小于64KB文件内容并没置0,不过几K的文件测试有效

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

Snap1.jpg
回复

使用道具 举报

242#
发表于 2010-11-22 14:19:13 | 显示全部楼层
下面有什么不同?
1:
WENV for /f "eol=; tokens=1-2 delims==;" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" (set b=%j ; echo -n $ ; echo $${a}=$${b}))

2:
WENV for /f "eol=; tokens=1-2 delims==;" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" ]]& (set b=%j ; echo -n $ ; echo $${a}=$${b}))

结果是1无法显示输出

而在非for命令中测试是完全一样的,bug?

[ 本帖最后由 zhaohj 于 2010-11-22 14:21 编辑 ]
回复

使用道具 举报

243#
发表于 2010-11-22 22:26:25 | 显示全部楼层
运行FOR会死机:
WENV for /f "eol=; tokens=1-2 delims==;" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" (set b=%j ; echo -n $ ; echo $${a}=$${b}))

下面是这个txt文件,很标准的。

如果直接输出到内存或文件,马上死机。

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

TXT.rar

4.78 KB, 下载次数: 20, 下载积分: 无忧币 -2

回复

使用道具 举报

244#
发表于 2010-11-23 00:10:11 | 显示全部楼层
奇怪,输出到屏幕,开始几页并没死机,不过第一页开头内容有点问题的。

估计是内存冲突了。
回复

使用道具 举报

245#
发表于 2010-11-23 00:22:01 | 显示全部楼层
PCI\VEN_13C1&DEV_1002="3wareDrv"

delims==; 这里的引号都是配对的,%j="3wareDrv"后去掉两边引号也不存在有单引号问题。
估计不是这个原因。
回复

使用道具 举报

246#
发表于 2010-11-23 08:21:31 | 显示全部楼层
@tuxw
上面测试的是C大的11-22上传的最新版,loop、break等命令还没有加入的。这个等稳定加入也不迟,代码很少。
这次的动作可能真的很大。
回复

使用道具 举报

247#
发表于 2010-11-23 10:20:06 | 显示全部楼层
上传到哪里了?
回复

使用道具 举报

248#
发表于 2010-11-23 11:06:03 | 显示全部楼层
测试OK!等待你加入新功能,十分挂念find(这个代码有点多)。

再测试一下config.

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

使用道具 举报

249#
发表于 2010-11-23 11:19:08 | 显示全部楼层
1:
WENV for /f "eol=; tokens=1-2 delims==;" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" (set b=%j ; echo -n $ ; echo $${a}=$${b}))
2:
WENV for /f "eol=; tokens=1-2 delims==;" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" ]]& (set b=%j ; echo -n $ ; echo $${a}=$${b}))

生成的第一个PCI信息有点不同

-------------------不是不同,是错位了。

[ 本帖最后由 zhaohj 于 2010-11-23 11:22 编辑 ]

Snap1.jpg (42.58 KB, 下载次数: 61)

1 生成

1 生成

Snap2.jpg (48.33 KB, 下载次数: 59)

2 生成

2 生成
回复

使用道具 举报

250#
发表于 2010-11-23 12:33:49 | 显示全部楼层
扩展一次之后变成.
check "${a:0:4}"=="PCI\" (set b=%j ; echo -n $ ; echo ${a}=${b})

这个扩展一次之后变成:
check "${a:0:4}"=="PCI\" ]]& (set b=%j ; echo -n $ ; echo ${a}=${b})

会产生不同结果?
回复

使用道具 举报

251#
发表于 2010-11-23 13:01:05 | 显示全部楼层
命令行下测试:

[ 本帖最后由 zhaohj 于 2010-11-23 13:09 编辑 ]

Snap1.jpg (46.21 KB, 下载次数: 51)

Snap1.jpg

Snap2.jpg (28.5 KB, 下载次数: 52)

Snap2.jpg
回复

使用道具 举报

252#
发表于 2010-11-23 13:36:54 | 显示全部楼层
这样讲就理解了,下面相等:
1:
WENV for /f "tokens=1-2 delims==" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" (set b=%j ; echo -n $ ; echo $$$${a}=$$$${b}))
2:
WENV for /f "tokens=1-2 delims==" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" ]]& (set b=%j ; echo -n $ ; echo $${a}=$${b}))
回复

使用道具 举报

253#
发表于 2010-11-23 14:36:36 | 显示全部楼层
wenv set srspath=/SRS/OEM/
wenv set a=TXTSETUP.OEM

我记得有个版本可以把

wenv "echo cat --length=0 ${srspath}${a} && FAT copy /o ${srspath}${a} (fd1)/"  >> (fd2)/DRIVERS.BAT
这个版本不行了,只能这样:
wenv (echo -n cat --length=0 ${srspath}${a} & ; echo & FAT copy /o ${srspath}${a} (fd1)/)  >> (fd2)/DRIVERS.BAT

引号引起来的命令,让它只识别左边引号开始的第一个命令。

[ 本帖最后由 zhaohj 于 2010-11-23 14:50 编辑 ]
回复

使用道具 举报

254#
发表于 2010-11-23 15:32:52 | 显示全部楼层
sorry,测试过config,没变回来,忘了。


正常

但wenv config quote_char='
不正常了

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

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

Snap1.jpg

Snap2.jpg (62.95 KB, 下载次数: 60)

Snap2.jpg
回复

使用道具 举报

255#
发表于 2010-11-23 16:19:57 | 显示全部楼层
一股作气,把find也加进去吧。

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

使用道具 举报

256#
发表于 2010-11-23 22:59:01 | 显示全部楼层
这样吗?
search /SRS/OEM/VMWARE/*.SY?
search /SRS/OEM/VMWARE/*.*
回复

使用道具 举报

257#
发表于 2010-11-24 11:17:49 | 显示全部楼层
call 调用改成了和GRUB4DOS命令行或菜单执行的命令相同的调用。所以call命令有所增强。
@tuxw:
以前的版本所有没通过,找到上面原因了。
在命令行下全通过,不过我有菜单,因为需要goto.

WENV call cat --length=0 ${srs} ]]& (call map --mem=0xB000 ${srs} (rd) ; set a=${IDN}.SY_)
WENV call cat --length=0 ${srs1} ]]& (call map --mem=0xB000 ${srs1} (rd) ; set a=${IDN}.SYS)
WENV get a || configfile (fd2)/ERROR.LST
WENV echo ${a} | FAT copy /o (rd)+1 (fd1)/

---------------------
]]& 没有消除前面的ERROR,导致运行中断

[ 本帖最后由 zhaohj 于 2010-11-24 11:47 编辑 ]

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

Snap1.jpg
回复

使用道具 举报

258#
发表于 2010-11-24 13:51:17 | 显示全部楼层
@tuxw:
最新版,还是发现问题,但问题很难查

在运行OEM驱动时,出现错误,你可以在菜单中“按4”打开debug

问题出在这一段(makeoem.lst):
(fd2)/ENVI.BAT
(fd2)/DRIVERS.BAT
##检查(fd1)中是否存在.sy?文件,如果没有提示错误返回
checkrange 1 debug && echo @@@check (fd1) exist .sy? file?
map --rd-base=0xF00000 && map --rd-size=1024
ls (fd1)/ > (rd)+1
WENV find .sy (rd)+1 && WENV set sys=${?_WENV} ! WENV reset sys
WENV get sys || configfile (fd2)/ERROR.LST
checkrange 1 debug && ls (fd1)/ && echo && pause --wait=10 Display (fd1) files information ,Press any key ...

-----------------
(fd2)/DRIVERS.BAT已经运行后,看图片复制已经成功。

[ 本帖最后由 zhaohj 于 2010-11-24 13:59 编辑 ]

Snap1.jpg (85.41 KB, 下载次数: 81)

Snap1.jpg

test6_tuxw.rar

87.5 KB, 下载次数: 37, 下载积分: 无忧币 -2

回复

使用道具 举报

259#
发表于 2010-11-24 17:33:25 | 显示全部楼层
GRUB4DOS测试版,不认识GOTO了?不会跳转。
回复

使用道具 举报

260#
发表于 2010-11-25 00:02:51 | 显示全部楼层
@tuxw:
我也刚找到病因,问题出在这两句for
WENV for /f "tokens=3 delims==," %i in ( (fd1)/SYSINF ) do (set a=$u,%i ; check %<-$${a} loop ; set -e b=\x26\x26 ; echo cat --length=0 $${srspath}$${a} $${b} FAT copy /o $${srspath}$${a} (fd1)/) >> (fd2)/DRIVERS.BAT
WENV for /f "tokens=3 delims==," %i in ( (fd1)/SYSINF ) do (set a=$u,%i ; check %<-$${a} loop ; check .SYS<-$${a} ]]& (set a=$${a!.SYS=.SY_} ; set -e b=\x26\x26 ; echo cat --length=0 $${srspath}$${a} $${b} FAT copy /o $${srspath}$${a} (fd1)/)) >> (fd2)/DRIVERS.BAT

一运行就死
回复

使用道具 举报

261#
发表于 2010-11-25 00:31:12 | 显示全部楼层
check % <-"$${a}" loop 还是死机
不是check % <-"$${a}" loop 引起的,是后面语句引起的,奇怪了

[ 本帖最后由 zhaohj 于 2010-11-25 00:46 编辑 ]
回复

使用道具 举报

262#
发表于 2010-11-25 00:47:22 | 显示全部楼层
933#
makeoem.lst
回复

使用道具 举报

263#
发表于 2010-11-25 08:27:29 | 显示全部楼层
毛病在字符替换:
set a=$${a!.SYS=.SY_}

这个替换在11-15版本的WENV中是没有问题的

---------------------
同样的语句,在命令行下是没有问题的。
改成以下通过:
WENV for /f "tokens=3 delims==," %i in ( (fd1)/SYSINF ) do (set a=$u,%i ; check %<-$${a} loop ; check .SYS<-$${a} ]]& (set a=$${a%.}.SY_ ;  echo -n cat --length=0 $${srspath}$${a} & ; echo &  FAT copy /o $${srspath}$${a} (fd1)/)) >> (fd2)/DRIVERS.BAT

[ 本帖最后由 zhaohj 于 2010-11-25 08:56 编辑 ]

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

Snap1.jpg
回复

使用道具 举报

264#
发表于 2010-11-25 08:59:25 | 显示全部楼层
另外,FOR语句中空行是参与运行的,能否改进一下,以免出现:
set a=%i  ;结果变量a的值是%i

上面的附件,因为srspath中包含路径,如srspath=/SRS/OEM/,前面不能转义
而且echar(&&)前后都要有空字符。

C大新版可以直接用:
“echo cat --length=0 $${srspath}$${a} && FAT copy /o $${srspath}$${a} (fd1)/"

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

使用道具 举报

265#
发表于 2010-11-25 09:15:48 | 显示全部楼层
现在的问题是FOR语句中字符串替换出现问题,不管什么一替换就死机。与连接符无关。
回复

使用道具 举报

266#
发表于 2010-11-25 10:27:39 | 显示全部楼层
C大这个一定要加]]& ,不然一次扫描后check ... (wenv-comnand)是一条命令


你在FOR中用字符替换不会死机?

[ 本帖最后由 zhaohj 于 2010-11-25 10:30 编辑 ]
回复

使用道具 举报

267#
发表于 2010-11-25 11:16:41 | 显示全部楼层
不行,FOR中字符替换还是死机。VM7虚拟机(vmware player),难道是虚拟机问题?
你用下面文件测试一下,命令行下 FOR也行

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

sysinf.rar

127 Bytes, 下载次数: 49, 下载积分: 无忧币 -2

回复

使用道具 举报

268#
发表于 2010-11-25 20:16:33 | 显示全部楼层
问C大、tuxw:
map --rd-base=xxx
map --rd-size=yyy
运行后怎么恢复初始值?
不然我后面
map --mem /file (rd)
FAT copy (rd)+1 (fd1)/file1会出问题,文件变成yyy大小了。

-------------
奇怪,在命令行下测试并没有发现这个问题,但我运行SRSF6后仿真盘上文件都一样大,如上面size=2048

[ 本帖最后由 zhaohj 于 2010-11-25 20:31 编辑 ]
回复

使用道具 举报

269#
发表于 2010-11-25 21:02:21 | 显示全部楼层
竟然发现下面没起作用:
WENV reset a
WENV call cat --length=0 ${srs} && WENV (call map --mem=0xB000 ${srs} (rd) ; set a=${IDN}.SY_)
WENV call cat --length=0 ${srs1} && WENV (call map --mem=0xB000 ${srs1} (rd) ; set a=${IDN}.SYS)
WENV get a || configfile (fd2)/ERROR.LST
WENV echo ${a} | FAT copy /o (rd)+1 (fd1)/
-----------------
改成下面成功:
WENV reset a
WENV call cat --length=0 ${srs} ]]& call map --mem=0xB000 ${srs} (rd) ]]] set a=${IDN}.SY_
WENV call cat --length=0 ${srs1} ]]& call map --mem=0xB000 ${srs1} (rd) ]]] set a=${IDN}.SYS
WENV get a || configfile (fd2)/ERROR.LST
WENV echo ${a} | FAT copy /o (rd)+1 (fd1)/

因为有菜单,不敢用wenv call exec fat

[ 本帖最后由 zhaohj 于 2010-11-25 21:03 编辑 ]
回复

使用道具 举报

270#
发表于 2010-11-25 21:17:49 | 显示全部楼层
另外发现一个怪现象:下面的仿真盘都是完好的,但出现:

Snap1.jpg (15.04 KB, 下载次数: 65)

Snap1.jpg

Snap2.jpg (35.85 KB, 下载次数: 73)

Snap2.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-9 13:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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