标题: [文本处理] 批处理文件能否搜索包含特定文字的文本文档? [打印本页]
作者: smallbear 时间: 2010-5-19 22:23 标题: 批处理文件能否搜索包含特定文字的文本文档?
一个名为1.txt的文本文档,里面有如下内容::
D:\123
D:\456
D:\789
一个名为2.txt的文本文档,里面有如下内容:
批处理之家
bathome
要求1
现在我想用一个批处理文件,在1.txt中记录的路径中搜索所有TXT文件,并将包含2.txt中的任意一个词语的所有文档输出到3.txt
要求2
用一个批处理文件,在1.txt中记录的路径中搜索所有TXT文件,并将包含2.txt中的所有词语的所有文档输出到4.txt
谢谢
[ 本帖最后由 smallbear 于 2010-5-19 22:26 编辑 ]
作者: sgaizxt001 时间: 2010-5-19 23:11
第一步:- @echo off
- for /f "delims=" %%a in (1.txt) do (
- for /f "delims=" %%b in ('dir /s /b /a-d "%%a\*.txt"') do (
- setlocal enabledelayedexpansion
- echo %%~nxb>tmp_.txt
- findstr /i /g:2.txt tmp_.txt >>3.txt
- endlocal
- )
- )
- pause
- del tmp_.txt
复制代码
[ 本帖最后由 sgaizxt001 于 2010-5-19 23:35 编辑 ]
作者: sgaizxt001 时间: 2010-5-19 23:30
第2步,想了一下,思路是对每个文本的内容进行逐字判断,如果包含这些字,就输出问本名,最后COPY /B,如果不包含就不要,但是效率将非常非常的底,没必要写了。
不知道楼主提这样的要求是要做什么用
另外想请教一下关于findstr /d:的用法
[ 本帖最后由 sgaizxt001 于 2010-5-19 23:31 编辑 ]
作者: smallbear 时间: 2010-5-19 23:32
先谢谢楼上的兄弟,可是我试了下,输出的3.txt里面是空的啊?
作者: sgaizxt001 时间: 2010-5-19 23:36
我的输出结果:
bathomebbb.txt
批处理之家aaa.txt
bathomebcd.txt
批处理之家abc.txt
bathome123.txt
批处理之家asd.txt
我把/b参数去掉了,你在复制代码看看。
[ 本帖最后由 sgaizxt001 于 2010-5-19 23:38 编辑 ]
作者: namejm 时间: 2010-5-19 23:37
第1步:- @echo off
- (for /f "delims=" %%i in (1.txt) do (
- findstr /i /g:2.txt "%%i\*.txt"
- ))>3.txt
复制代码
以上代码未经测试,请自行测试。
在写出第2步代码之前,我想了解一下2.txt中有多少行字符串?
作者: sgaizxt001 时间: 2010-5-19 23:39
namejm,能否帮我讲解一下findstr /d:dir的用法?
谢谢
作者: smallbear 时间: 2010-5-19 23:41
不是很多,三四行吧.谢谢.
作者: smallbear 时间: 2010-5-19 23:44
原帖由 sgaizxt001 于 2010-5-19 23:36 发表
我的输出结果:
bathomebbb.txt
批处理之家aaa.txt
bathomebcd.txt
批处理之家abc.txt
bathome123.txt
批处理之家asd.txt
我把/b参数去掉了,你在复制代码看看。
怪事,我这里还是不行.
作者: smallbear 时间: 2010-5-19 23:45
原帖由 namejm 于 2010-5-19 23:37 发表
第1步:@echo off
(for /f "delims=" %%i in (1.txt) do (
findstr /i /g:2.txt "%%i\*.txt"
))>3.txt 以上代码未经测试,请自行测试。
在写出第2步代码之前,我想了解一下2.txt中有多少行字符 ...
该代码把所有包含关键字的行全部输出了,能不能只输出包含关键字文件的文件名?
谢谢.
[ 本帖最后由 smallbear 于 2010-5-19 23:52 编辑 ]
作者: namejm 时间: 2010-5-20 00:09
原来是只输出文件名而不是输出文件内容啊,那改一下吧:
- @echo off
- (for /f "delims=" %%i in (1.txt) do (
- findstr /i /m /g:2.txt "%%i\*.txt"
- ))>3.txt
复制代码
作者: caruko 时间: 2010-5-20 12:41
findstr 能做大部份工作了, 再for 取到输出中有用的部分就可以
作者: smallbear 时间: 2010-5-22 18:22
谢谢楼上各位的帮助,11楼的代码非常好,完全能够达到我的要求1.不知道能不能帮我把要求2也写一下呢?
非常感谢
作者: namejm 时间: 2010-5-23 10:10
原帖由 sgaizxt001 于 2010-5-19 23:39 发表
namejm,能否帮我讲解一下findstr /d:dir的用法?
谢谢
查看了一下 findstr /? 和 ntcmds.chm 中关于 findstr 的解释,发现它们对分隔符号的定义是完全不同的,一个是以逗号作分隔符,一个说是以分号做分隔符,反复测试,竟然找不到这个参数的正确用法,真是灵异。
作者: zqz0012005 时间: 2010-5-23 11:06 标题: 回复 14楼 的帖子
我的XP SP2测试一下就出来了啊:
C:\Documents and Settings\Administrator\桌面>findstr /m /d:.;\ . *.txt *.ini
.:
an.txt
u8.txt
西游记中红孩儿的老爸是谁.txt
\:
boot.ini
C:\Documents and Settings\Administrator\桌面>findstr /m /d:.,\ . *.txt *.ini
.,\:
FINDSTR: 无法打开 .,\
作者: namejm 时间: 2010-5-23 11:48
昏倒,居然是直接查找文件名的,我还以为是在某几种类型的文件中查找关键词呢。
作者: zqz0012005 时间: 2010-5-23 12:19
你说的“查找文件名”可能会让人有点误解,注意我是加了/m选项。
findstr [/D:folder1[;folder2]...] [other_options] search_string file1 [file2]...
在指定folder中的指定file中查找指定字符串search_string
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |