Windows批处理在文件中搜索关键字并应用条件

时间:2016-06-16 19:31:47

标签: windows batch-file cmd

我正在尝试编写批处理以在日志文件中查找关键字,例如“失败”,“错误”,并应用条件将其写入另一个文件。

Ex:a。)abc.log ... search.bat - 如果abc.log有一个单词,如“错误”或“失败”,ECHO“数据加载失败”否则ECHO“数据加载成功”

试过这个,

for /F "delims=" %%a in ('findstr /I /c:"EPMAT" C:\Temp_logs\ExpDataload.log') do set ErrorCount=%%a

IF  /I "%ErrorCount%" == "EPMAT-1:Command Failed to execute." (
    SET Message="DATA LOAD FAILED"
) ELSE (
    SET Message="DATA LOAD SUCCESS"
)

ECHO %Message%

但是,%ErrorCount%存储整行,而不是关键字。所以我甚至试图检查整条线,但它总是显示“数据负载成功”而不是失败。

我可能在IF条件中遗漏了一些东西。

2 个答案:

答案 0 :(得分:0)

在测试中脚本形式适合我。是的,ErrorCount将成为整行 - 我只能猜测存在一些不匹配的空格,其中字符串不相等。你能发布一些来自ExpDataload.log的行吗?

作为替代方法,findstr可以搜索多个单词,如果找到匹配则设置返回/错误级别0,如果失败则设置为1:

findstr /I "failed error" c:\temp_logs\expdataload.log 
if NOT ERRORLEVEL 1 (
    echo "DATA LOAD FAILED"
) else (
    echo "DATA LOAD SUCCESS"
)

使用@aschipfl进行编辑更改以使其...正常工作。 : - |

答案 1 :(得分:0)

findstr输出它找到的匹配行。您的循环将此输出的每一行连续分配给ErrorCount

因此,在循环之后,变量将保持找到的 last 匹配,这可能是您的问题,如果您可能尝试与第一个匹配进行比较。

但是,如果未找到匹配项,则该变量实际上为空,因此您只需与""进行比较:

IF  /I "%ErrorCount%" == "" (
    SET Message="DATA LOAD SUCCESS"
) ELSE (
    SET Message="DATA LOAD FAILED"
)

或者,如果您对找到的实际行不感兴趣,只需检查错误级别,如@ TessellatingHeckler的答案。