使用道具 举报
!BAT :记录偏移1 cat --locate=[aaaa] /T.TXT | WENV set s1= WENV set s1=0x${s1} WENV check " "<-"${s1}" set s1=${s1%% } :记录偏移2 cat --locate=[bbbb] /T.TXT | WENV set s2= WENV set s2=0x${s2} WENV check " "<-"${s2}" set s2=${s2%% } :如果查找次序相反,交换偏移量,保证s1在前面 :交换方法1: 大文件时加法有可能计算溢出 :WENV check ${s1}>=${s2} (calc s1=s1+s2 ; calc s2=s1-s2 ; calc s1=s1-s2) :交换方法2: 需要修复calc bug的新版WENV WENV check ${s1}>=${s2} (calc s1=s1^s2 ; calc s2=s1^s2 ; calc s1=s1^s2) :起始位置, 字节计数 WENV calc s1=s1+6+2 WENV calc s2=s2-s1-2 WENV call cat --skip=${s1} --length=${s2} /T.TXT
T.rar
2010-11-6 01:27 上传
点击文件名下载附件
440 Bytes, 下载次数: 422
原帖由 zhaohj 于 2010-11-6 16:14 发表 inifile a:\txtsetup.oem [aaaa]>f6.tmp DOS下就这么简单提取出了[aaaa]段落的内容
Test-2010-11-06-18-56-19.png (9.52 KB, 下载次数: 1161)
下载附件
2010-11-6 19:14 上传
!BAT设置变量INIFILE=INI文件名 [段名],打印该段内容 :参数检查 WENV get INIFILE || kernel WENV reset _ini_* :文件名、段名 WENV set _ini_fn=${INIFILE% } WENV set _ini_sc=${INIFILE## } :保存当前debug状态,打开回显,否则管道命令可能失败 debug status | WENV set -t _ini_db= && WENV set _ini_db=${_ini_db## } && debug 1 :记录偏移1 WENV call cat --locate=${_ini_sc} ${_ini_fn} | WENV set -t _ini_s1= WENV get _ini_s1 || WENV echo -e not found sect ${_ini_sc}\n && WENV call debug ${_ini_db} && WENV reset _ini_* && kernel WENV set _ini_s1=0x${_ini_s1} WENV check " "<-"${_ini_s1}" set _ini_s1=${_ini_s1%% } :记录偏移2 WENV calc _ini_tmp=_ini_s1+1 WENV call cat --skip=${_ini_tmp} --locate=[ ${_ini_fn} | WENV set -t _ini_s2= WENV set _ini_s2=0x${_ini_s2} WENV check " "<-"${_ini_s2}" set _ini_s2=${_ini_s2%% } :没有找到下一个段时,设置为文件长度 WENV check ${_ini_s2,?}==2 && WENV call cat --length=0 ${_ini_fn} | WENV set -t _ini_s2= WENV check " "<-"${_ini_s2}" set _ini_s2=${_ini_s2## } :起始位置, 字节计数 WENV calc _ini_s1=_ini_s1+${_ini_sc,?} WENV calc _ini_s2=_ini_s2-_ini_s1 :直接显示, 首尾可能有换行(如果内容较短,可通过变量中转显示去掉首尾换行) WENV call cat --skip=${_ini_s1} --length=${_ini_s2} ${_ini_fn} :恢复环境 WENV call debug ${_ini_db} WENV reset _ini_*
原帖由 zhaohj 于 2010-11-6 22:54 发表 想把文本中注释先过滤掉,下面的命令竟然不行: cat --length=0 (fd1)/txtsetup.oem && fat mkfile size=* (fd1)/temp echo ; > (fd1)/temp wenv for /f "eol=# delims=" %i in ( (fd1)/txtsetup.oem ) do ( ...
原帖由 zhaohj 于 2010-11-6 23:16 发表 这个问题的发现,主要是locate=[ 时,象F6的txtsetup.oem有太多的[,导致变量值超过512。 我上传这个txtsetup.oem,比较大。
原帖由 zhaohj 于 2010-11-6 23:31 发表 #20楼还是有问题,你再测试一下,我的理解,应该do (...) 应该每个循环执行()中的命令
Test-2010-11-06-23-41-21.png (11.34 KB, 下载次数: 881)
2010-11-6 23:44 上传
原帖由 chenall 于 2010-11-6 23:38 发表 看了一下这个是WENV的BUG。 看下面的代码,等tuxw的修正版吧。 for(i=0;i
Test-2010-11-07-09-10-22.png (12.19 KB, 下载次数: 826)
2010-11-7 09:12 上传
原帖由 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}
GETSECT.rar
2010-11-7 13:21 上传
835 Bytes, 下载次数: 88
Test-2010-11-08-01-11-04.png (21.21 KB, 下载次数: 546)
2010-11-8 01:54 上传
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )
闽公网安备 35020302032614号
GMT+8, 2025-5-23 15:31
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.