【问题标题】:Batch script to search a string in multiple xml files用于在多个 xml 文件中搜索字符串的批处理脚本
【发布时间】: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


【解决方案1】:

您在“其他”情况下有出口?所以它在第一次“没有发现错误”后退出

编辑:试试这个:

echo off
cd C:\Logs\
setlocal EnableDelayedExpansion 

setlocal EnableDelayedExpansion 
for /r . %%g in (*.xml) do ( set xml_file_name=%%~nxg 

    find /I "Error"  "C:\Logs\!xml_file_name!" > nul & if errorlevel 1 ( 
        echo No Error found.
    ) else (
        echo Error found at C:\Logs\!xml_file_name!
    )
)

【讨论】:

  • 但是在执行时,errorlevel 总是等于 0,因此它不会进入 else 块。对于每个文件,它都会输出“发现错误”
  • 如果答案正确,您介意接受吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-07-07
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多