Board logo

标题: [文本处理] 批处理如何根据列表来搜索包含指定字符串的文件? [打印本页]

作者: smallbear    时间: 2010-5-23 20:03     标题: 批处理如何根据列表来搜索包含指定字符串的文件?

小弟有一个名为1.txt的文件,内容如下:

d:\proram files\1.txt
d:\proram files\2.txt
d:\proram files\3.txt
d:\proram files\a.txt
d:\proram files\abc\1.txt


有一个名为2.txt的文件,包含如下内容:

批处理之家
电脑
bathome


现在想用一个批处理文件来搜索1.txt中的文件是否包含2.txt中的任意一个词语.并将包含任意一个关键字的路径及文件名输出为3.txt

谢谢.
作者: del    时间: 2010-5-23 21:18

  1. findstr /l /m /g:2.txt /f:1.txt > 3.txt
复制代码

[ 本帖最后由 del 于 2010-5-23 21:46 编辑 ]
作者: sgaizxt001    时间: 2010-5-23 21:25

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (1.txt) do (
  4.    call :lp "%%a"
  5. )
  6. pause
  7. for /f "delims=" %%i in (test.txt) do (
  8.     if not defined %%i set %%i=A & echo %%i>>3.txt
  9. )
  10. del test.txt
  11. exit
  12. :lp
  13. for /f "delims=" %%b in (2.txt) do (
  14. findstr /l /c:"%%b" %1 && echo.%~1>>test.txt
  15. )
复制代码
2楼的代码我测试输出是空白,我这个效率可能是很大的问题。
我这个测试的时候我也改了1.txt的内容,因为d:\program files\1.txt我这里会提示找不到文件,我就修改为D:\Program Files\1.txt。其他也都修改了

[ 本帖最后由 sgaizxt001 于 2010-5-23 21:27 编辑 ]
作者: smallbear    时间: 2010-5-23 21:49

非常感谢大家的帮助,楼上的代码我试了一下,暂时还没发现有什么问题.我先仔细测试一下.

另外想请问一下,有没有批处理可以把1.txt中的文件中的网址提取出来?
作者: sgaizxt001    时间: 2010-5-23 21:51

del,你的代码输出就只用了bathome去查找,两个中文字串没有起作用,我这里测试是这样的
作者: del    时间: 2010-5-23 21:59     标题: 回复 3楼 的帖子

确实。经测试是中文字符的问题,是 findstr 的 BUG。

可以用以下代码:
  1. findstr /r /m /g:2.txt /f:1.txt > 3.txt
复制代码
但是,包含关键字的 2.txt 中不能包含正则表达式的符号,例如:
    . 会搜索到所有字符
    a.b 会搜索到 a+任意字符+b
    [0-9] 会搜索到 0 ~ 9 这 9 个数字

[ 本帖最后由 del 于 2010-5-23 22:01 编辑 ]
作者: smallbear    时间: 2010-5-23 22:04

del的代码我试了一下,暂时还没发现有问题.等我仔细测试一下,看看是否会有其它BUG.另外二位能不能帮我看一下4楼的问题?
作者: sgaizxt001    时间: 2010-5-23 22:21

可以提,不过综合你发的这些帖子来看,一环扣一环的有点挤牙膏一样,但是我希望你能把你最终目的想要做什么一下全说出来。一下解决就OK了
作者: smallbear    时间: 2010-5-23 22:43

其实我就是想把中带有关键字的文本文档提取出来,但是前几天发的帖有些网友的回复表面上看起来是可以的,而仔细测试却又不行.所以我又换了一些方式,先发帖问了搜索指定目录下的文本文档,接着今天 再发帖问如何根据搜索到的列表来查找文档是否包含关键字.
作者: sgaizxt001    时间: 2010-5-23 22:48

我尝试写一下,晚点发
作者: smallbear    时间: 2010-5-23 23:16

楼上的代码把网址那一行的内容全部输出了.比如说我的网址没有单独在一行,而是网址后面还有其它文字.那么它将这个网址和它后面的文字一起输出了.
作者: sgaizxt001    时间: 2010-5-23 23:27

findstr从每一行里查找有没有指定字符,如果有就输出整行。所以肯定连后面的文字都输出
作者: del    时间: 2010-5-24 11:11     标题: 回复 4楼 的帖子

提取网址代码:
  1. @echo off
  2. (
  3.     for /f "tokens=*" %%a in ('findstr /i /f:1.txt "http://"') do (
  4.         set var=%%a
  5.         SetLocal EnableDelayedExpansion
  6.         set var=!var:"=!
  7.         set "var=!var:>= !"
  8.         set "var=!var:?=?!"
  9.         set "var=!var:'= !"
  10.         set var=!var:*http://=!
  11.         for %%a in ("!var:http://=" "!") do (
  12.             for /f %%b in (%%a) do set var=%%b
  13.             echo http://!var:?=?!
  14.         )
  15.         EndLocal
  16.     )
  17. ) > _url.txt
复制代码

[ 本帖最后由 del 于 2010-5-24 22:53 编辑 ]




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