【发布时间】:2018-10-18 05:33:23
【问题描述】:
我编写了一个批处理脚本来搜索文件夹中多个 XML 文件中的字符串“Error”。
我正在使用 for 循环遍历所有文件并使用 find 命令搜索这些文件中的特定字符串。 但是,我看到特定文件中字符串的搜索仅在一次完整迭代后发生,而不是在写入 find 命令的行发生。它没有给出正确的输出。
我编写了以下脚本(Windows):
cd C:\Logs\
setlocal EnableDelayedExpansion
for /r . %%g in (*.xml) do ( set xml_file_name=%%~nxg
find /I "Error" "C:\Logs\!xml_file_name!"
if %errorlevel%==0 (
echo Error found at C:\Logs\!xml_file_name!
) else (
echo No Error found.
exit )
)
大约有 10-15 个 xml 文件,如果 xml 文件中有一个字符串“Error”,它应该为每个文件输出“error found”,否则“no error found”。
请帮我输入正确的代码。
【问题讨论】:
-
如果XML文件在
C:\Logs的目录下,那为什么要用for /r递归到目录呢?这使得C:\Logs\!xml_file_name!的后面路径变得可疑,因为它可能是无效路径。在使用find之前正在评估%errorlevel%,因此您需要延迟扩展变量以变为!errorlevel!。 -
成功了,谢谢你的解决方案。
-
一个更简单的解决方案是
findstr /MI "error" C:\Logs\*.xml || (echo no errors found)
标签: windows batch-file search