Board logo

标题: [文本处理] 批处理文件能否搜索包含特定文字的文本文档? [打印本页]

作者: 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

第一步:
  1. @echo off  
  2. for /f "delims=" %%a in (1.txt) do (
  3. for /f "delims=" %%b in ('dir /s /b /a-d "%%a\*.txt"') do (
  4.    setlocal enabledelayedexpansion
  5.    echo %%~nxb>tmp_.txt
  6.    findstr /i /g:2.txt tmp_.txt >>3.txt
  7.    endlocal
  8. )
  9. )
  10. pause
  11. 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步:
  1. @echo off
  2. (for /f "delims=" %%i in (1.txt) do (
  3.     findstr /i /g:2.txt "%%i\*.txt"
  4. ))>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

原来是只输出文件名而不是输出文件内容啊,那改一下吧:
  1. @echo off
  2. (for /f "delims=" %%i in (1.txt) do (
  3.     findstr /i /m /g:2.txt "%%i\*.txt"
  4. ))>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