2016-10-03 86 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' ... *。謝謝。 –

相關問題