标题: [文本处理] 批处理如何根据列表来搜索包含指定字符串的文件? [打印本页]
作者: 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
- findstr /l /m /g:2.txt /f:1.txt > 3.txt
复制代码
[ 本帖最后由 del 于 2010-5-23 21:46 编辑 ]
作者: sgaizxt001 时间: 2010-5-23 21:25
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- call :lp "%%a"
- )
- pause
- for /f "delims=" %%i in (test.txt) do (
- if not defined %%i set %%i=A & echo %%i>>3.txt
- )
- del test.txt
- exit
-
- :lp
- for /f "delims=" %%b in (2.txt) do (
- findstr /l /c:"%%b" %1 && echo.%~1>>test.txt
- )
复制代码
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。
可以用以下代码:- 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楼 的帖子
提取网址代码:- @echo off
- (
- for /f "tokens=*" %%a in ('findstr /i /f:1.txt "http://"') do (
- set var=%%a
- SetLocal EnableDelayedExpansion
- set var=!var:"=!
- set "var=!var:>= !"
- set "var=!var:?=?!"
- set "var=!var:'= !"
- set var=!var:*http://=!
- for %%a in ("!var:http://=" "!") do (
- for /f %%b in (%%a) do set var=%%b
- echo http://!var:?=?!
- )
- EndLocal
- )
- ) > _url.txt
复制代码
[ 本帖最后由 del 于 2010-5-24 22:53 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |