Board logo

标题: [文本处理] 批处理如何根据A文本列出的字符串/关键词提取出B文本以这些字符串/关键词开头的行? [打印本页]

作者: torrent151221    时间: 2016-7-4 17:23     标题: 批处理如何根据A文本列出的字符串/关键词提取出B文本以这些字符串/关键词开头的行?

本帖最后由 pcl_test 于 2016-7-4 18:35 编辑

有两个文件a.txt b.txt
a.txt中是一些关键字,内容如下:
test
add-ii
new
abc-ee

b.txt中是需要搜索的文件,里面内容如下:
1.说明**
数字dsds**
2.解决9999***
   test *******
   abc-ee ******
   可能****
3. 在说明**
   说明test555****


想要获取b.txt中,包含a.txt关键字打头的行的内容并写入c.txt中
使用:
findstr /ig:a.txt  /b b.txt
输出结果是空的
使用命令:
findstr /ig:a.txt b.txt
结果输出:
   test *******
   abc-ee ******
   说明test555****

但是我只想要a.txt中关键字打头的行
注:
a.txt中每行开始没有空格,也没有tab键
b.txt中每行开始有的有空格,有的没有空格。以a.txt中关键字打头的行,关键字前都有个tab键
作者: pcl_test    时间: 2016-7-4 19:44

  1. //&cls&cscript -nologo -e:jscript "%~f0"<"a.txt" "b.txt"&pause&exit
  2. var str = WSH.StdIn.ReadAll().replace(/[\*\.\?\+\$\^\[\]\(\)\{\}\|\/]/g,'\\$&').split(/\r\n/).join('|');
  3. var reg = new RegExp('(^|[\\r?\\n])[ \\t]*('+str+').*', 'g');
  4. var lines = (new ActiveXObject('Scripting.FileSystemObject')).OpenTextFile(WSH.Arguments(0), 1).ReadAll().match(reg);
  5. WSH.echo(lines.join(''));
复制代码

作者: pcl_test    时间: 2016-7-5 13:00

回复 4# torrent151221

批处理不是vbs
作者: torrent151221    时间: 2016-7-6 15:07

回复 3# pcl_test
改成批处理运行也出错
H:\tmp\test.bat(1, 1) Microsoft JScript 编译错误:
无效字符

请按任意键继续. . .
作者: pcl_test    时间: 2016-7-6 15:14

回复 4# torrent151221

批处理文件编码要ANSI,你自己是不是增加了其他内容?把你的bat文件及测试txt打包发附件上来
作者: torrent151221    时间: 2016-7-6 16:30

本帖最后由 torrent151221 于 2016-7-6 16:32 编辑

回复 5# pcl_test

编码是ANSI,比对了下内容也一样,但是就是报错,我新拷贝了一份,再执行没问题了,很奇怪
因为查询的文件有多个,我把这个test.bat传参进去调用,
set preadmetxt=%1
//&cls&cscript -nologo -e:jscript "%~f0"<"menu.txt" "%preadmetxt%"&pause&exit
执行的时候报错
H:\tmp\test.bat(1, 5) Microsoft JScript 编译错误:
缺少“;”

请按任意键继续. .

  是不是不能这么用呢
作者: pcl_test    时间: 2016-7-6 16:49

本帖最后由 pcl_test 于 2016-7-7 10:49 编辑

回复 6# torrent151221

所以说肯定是你自己的问题。

2L首行改为,其他莫动
  1. /*&cls
  2. @echo off
  3. set "afile=menu.txt"
  4. cscript -nologo -e:jscript "%~f0"<"%afile%" "%~1">"结果.txt"
  5. pause&exit
  6. */
复制代码

作者: torrent151221    时间: 2016-7-6 17:27

本帖最后由 pcl_test 于 2016-7-6 17:54 编辑

回复 7# pcl_test
又报错了
H:\tmp\test.bat(10, 5) Microsoft JScript 运行时错误
: 错误的文件名或号码

请按任意键继续. . .
作者: pcl_test    时间: 2016-7-6 17:55

回复 8# torrent151221

把你的bat文件及测试txt打包发附件上来
作者: torrent151221    时间: 2016-7-7 11:17

回复 9# pcl_test
找到原因了,传参不支持*号通配符
现在又有另一个问题,执行test.bat后,整个程序就退出了
把pause&exit删掉也还是会退出
要怎么处理呢




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2