[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

小弟有一个名为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

谢谢.

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

[ 本帖最后由 del 于 2010-5-23 21:46 编辑 ]

TOP

  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 编辑 ]
努力学习,努力挣分

TOP

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

另外想请问一下,有没有批处理可以把1.txt中的文件中的网址提取出来?

TOP

del,你的代码输出就只用了bathome去查找,两个中文字串没有起作用,我这里测试是这样的
努力学习,努力挣分

TOP

回复 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 编辑 ]

TOP

del的代码我试了一下,暂时还没发现有问题.等我仔细测试一下,看看是否会有其它BUG.另外二位能不能帮我看一下4楼的问题?

TOP

可以提,不过综合你发的这些帖子来看,一环扣一环的有点挤牙膏一样,但是我希望你能把你最终目的想要做什么一下全说出来。一下解决就OK了
努力学习,努力挣分

TOP

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

TOP

我尝试写一下,晚点发
努力学习,努力挣分

TOP

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

TOP

findstr从每一行里查找有没有指定字符,如果有就输出整行。所以肯定连后面的文字都输出
努力学习,努力挣分

TOP

回复 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 编辑 ]

TOP

返回列表