我正在嘗試在一個目錄中的文件中查找多個字符串,其中有數千個。我目前運行以下命令來搜索目錄:使用findstr查找多個字符串的批處理文件並將文件複製到文件夾中
findstr /s "customerid" *
現在,這使我可以找到包含該字符串的文件。我通常有兩個信息的客戶ID和事件類型。一個客戶最多可以有30個相關事件,例如「網站註冊」。
我想要做的是,搜索目錄中的客戶ID和事件。然後將文件複製到新位置。這可能在批處理文件中嗎?
我正在嘗試在一個目錄中的文件中查找多個字符串,其中有數千個。我目前運行以下命令來搜索目錄:使用findstr查找多個字符串的批處理文件並將文件複製到文件夾中
findstr /s "customerid" *
現在,這使我可以找到包含該字符串的文件。我通常有兩個信息的客戶ID和事件類型。一個客戶最多可以有30個相關事件,例如「網站註冊」。
我想要做的是,搜索目錄中的客戶ID和事件。然後將文件複製到新位置。這可能在批處理文件中嗎?
假如你想找到包含兩個詞(在這個例子中customer
和event
)的所有文件,可以使用下面的腳本:
@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
命令前面!
@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
可以處理它。我們只需要兩個實例
/f:/
)其餘的代碼只是一個for /f
包裝兩個findstr
命令來處理第二個的輸出並進行文件複製。
在測試腳本之後,刪除copy
命令前面的大寫ECHO
!
Argh,我完全忘了'/ F'選項......這似乎是僅有一個'for/F'循環的唯一方法... +1! – aschipfl
@aschipfl,有時候我沒有看到那個超出我的頭腦的世界,並忘記包含OBVIOUS(再次在我的頭上)* ...刪除'echo' ... *。謝謝。 –
看看這個[搜索特定字符串的目錄中的XML文件,然後使用蝙蝠腳本執行復制操作](http://stackoverflow.com/questions/39577430/search-xml-files-in-directory-for - 特定字符串 - 然後做 - 複製 - 行動 - 使用 - 蝙蝠/ 39579775#39579775) – Hackoo
這是有點太混亂,我只知道一些簡單的命令:( – anallyexcel
所以你正試圖做一種AND操作,因此只有包含兩個搜索字符串的文件才被複制,對嗎?文件中搜索字符串(客戶,事件)的位置是否重要?共享顯示匹配的文本文件摘錄也是有幫助的。在文本中,還是他們的全文? – aschipfl