我正在尝试编写批处理以在日志文件中查找关键字,例如“失败”,“错误”,并应用条件将其写入另一个文件。
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条件中遗漏了一些东西。
答案 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的答案。