查看全部评分
使用道具 举报
原帖由 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, 下载次数: 924)
下载附件
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_*
原帖由 chenall 于 2010-11-5 19:12 发表 我觉得这些不是很重要的东西尽量不要使用内部的命令去实现。 你可以把你最终想要得到的结果贴出来。 注:是最终的目的,而不是使用这个命令要达到的过程,也许会有更好的解决方案。 看看tuxw或zxw能不能 ...
原帖由 tuxw 于 2010-11-6 15:59 发表 可以先查找 [aaaa] 再查找 [ 如果 不可预知,用 INIFILE 的方式更不可能实现,INI 是必须要知道段名和变量名才可以操作的
!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, 下载积分: 无忧币 -2
F6.JPG (132.41 KB, 下载次数: 1014)
2010-11-6 14:37 上传
原帖由 tuxw 于 2010-11-5 22:26 发表 可以用 WENV 命令实现,只是步骤麻烦了点
txtsetup.rar
2010-11-6 22:57 上传
1.55 KB, 下载次数: 93, 下载积分: 无忧币 -2
原帖由 zhaohj 于 2010-11-6 20:14 发表 我也测试是这样,批处理中无法使用wenv check 本来想用wenv for /f "delims= " %i in ("STRING”) do set s=%i 来获取16进制的第一个数值 发觉“ ”空格分隔符不起作用了。 ---------- 要用到新版的>>,看来 ...
2010-11-6 23:18 上传
2.42 KB, 下载次数: 92, 下载积分: 无忧币 -2
原帖由 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, 下载次数: 678)
2010-11-6 23:44 上传
原帖由 chenall 于 2010-11-6 23:38 发表 看了一下这个是WENV的BUG。 看下面的代码,等tuxw的修正版吧。 for(i=0;i
Snap1.jpg (15.42 KB, 下载次数: 630)
2010-11-7 00:12 上传
Test-2010-11-07-09-10-22.png (12.19 KB, 下载次数: 613)
2010-11-7 09:12 上传
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )
闽公网安备 35020302032614号
GMT+8, 2024-11-22 04:15
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.