我试图在一个目录中查找多个字符串,这个目录中有成千上万个文件。我目前使用以下命令搜索该目录:
findstr /s "customerid" *
现在我可以通过这个方法找到包含该字符串的文件。通常我有两个信息,一个是客户ID,另一个是事件类型。一个客户可能有多达30个相关事件,例如“网站注册”。
我想做的是,在目录中搜索客户ID和事件,然后将文件复制到新位置。在批处理文件中是否可能实现这一点?
我试图在一个目录中查找多个字符串,这个目录中有成千上万个文件。我目前使用以下命令搜索该目录:
findstr /s "customerid" *
假设你想要查找所有同时包含以下两个词(本例中为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
copy
命令前面的大写字母 ECHO
!@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
!
/F
选项...这似乎是唯一的方法来仅使用单个for /F
循环...+1! - aschipflecho
...*。谢谢。 - MC ND
Findstr "dog cat" etc
可以找到 dog 或者 cat。只要你的字符串不包含空格,这很简单。Findstr 可以做更多的事情,但语法比上面的复杂。你需要明确指定术语,例如允许使用哪些字符,它们需要按什么顺序排列。 - user6017774Findstr /I "dog" *.txt | Findstr /I "cat"
可以找到两者。 - user6017774