我正在尝试在一个目录中的文件中查找多个字符串,其中有数千个。我目前运行以下命令来搜索目录:使用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