使用findstr查找多个字符串并将文件复制到文件夹的批处理文件

时间:2016-10-03 20:43:56

标签: shell batch-file

我试图在目录中的文件中找到多个字符串,有数千个。我目前运行以下命令来搜索目录:

findstr /s "customerid" *

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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命令来处理第二个命令的输出并执行文件复制。

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