2016-10-03 449 views
3

我正在尝试在一个目录中的文件中查找多个字符串,其中有数千个。我目前运行以下命令来搜索目录:使用findstr查找多个字符串的批处理文件并将文件复制到文件夹中

findstr /s "customerid" * 

现在,这使我可以找到包含该字符串的文件。我通常有两个信息的客户ID和事件类型。一个客户最多可以有30个相关事件,例如“网站注册”。

我想要做的是,搜索目录中的客户ID和事件。然后将文件复制到新位置。这可能在批处理文件中吗?

+0

看看这个[搜索特定字符串的目录中的XML文件,然后使用蝙蝠脚本执行复制操作](http://stackoverflow.com/questions/39577430/search-xml-files-in-directory-for - 特定字符串 - 然后做 - 复制 - 行动 - 使用 - 蝙蝠/ 39579775#39579775) – Hackoo

+0

这是有点太混乱,我只知道一些简单的命令:( – anallyexcel

+0

所以你正试图做一种AND操作,因此只有包含两个搜索字符串的文件才被复制,对吗?文件中搜索字符串(客户,事件)的位置是否重要?共享显示匹配的文本文件摘录也是有帮助的。在文本中,还是他们的全文? – aschipfl

回答

3

假如你想找到包含两个词(在这个例子中customerevent)的所有文件,可以使用下面的脚本:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "PATTERN=*.txt" 
set "SOURCE=." 
set "TARGET=D:\Data" 
set "STRING1=customer" 
set "STRING2=event" 

pushd "%SOURCE%" && (
    for /F "delims=" %%F in ('findstr /S /M /I /R /C:"\<%STRING1%\>" "%PATTERN%"') do (
     for /F "delims=" %%E in ('findstr /M /I /R /C:"\<%STRING2%\>" "%%F"') do (
      ECHO copy "%%E" "%TARGET%\%%~nxE" 
     ) 
    ) 
    popd 
) 

endlocal 
exit /B 

已经测试脚本后,取出上 - ECHOcopy命令前面!

2
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "sourceFolder=x:\somewhere" 
    set "targetFolder=y:\another\place" 

    set "customerID=00000000" 
    set "event=eeeeeeeeee" 

    for /f "delims=" %%a in (' 
     findstr /m /s /l /c:"%customerID%" "%sourceFolder%\*" 
     ^| findstr /f:/ /m /l /c:"%event%" 
    ') do (
     ECHO copy "%%~fa" "%targetFolder%" 
    ) 

findstr可以处理它。我们只需要两个实例

  1. 第一个将搜索第一个字符串的所有输入文件,只返回匹配文件列表。此文件列表将被管道输送到第二个实例
  2. 第二个将查询的第二字符串,但仅在由第一个实例中找到的文件,读出的文件的列表,其中以从标准的输入流(/f:/
  3. 搜索

其余的代码只是一个for /f包装两个findstr命令来处理第二个的输出并进行文件复制。

在测试脚本之后,删除copy命令前面的大写ECHO

+0

Argh,我完全忘了'/ F'选项......这似乎是仅有一个'for/F'循环的唯一方法... +1! – aschipfl

+1

@aschipfl,有时候我没有看到那个超出我的头脑的世界,并忘记包含OBVIOUS(再次在我的头上)* ...删除'echo' ... *。谢谢。 –

相关问题