我运行第三方命令,在执行后显示如下错误级别:
return code: 33
return code: 1
return code: 4
return code: 5
我将命令的结果传递到日志文件中。所以test.log将有任何组合 这些行的例子如下:
return code: 33
return code: 1
在我的脚本中,我想检查日志文件的内容以及条目代码是否为任何内容 但是1(一个意味着成功)我会做一个动作
我认为find命令是我必须使用的,但不确定使用什么语法? 基本上逻辑应该是,查看日志文件,如果错误代码是1,则执行某些操作。
有人可以建议如何编写代码来检查这个吗?
提前感谢你 马特
答案 0 :(得分:1)
以下内容将确定日志文件中是否至少存在一个非1的返回码:
findstr /rxc:"return code: [0-9]*" test.log | findstr /ev ": 1" >nul && echo Do something
以下循环允许您对每个非1返回代码执行操作:
for /f "tokens=3 delims=: " %%A in (
'findstr /rxc:"return code: [0-9]*" test.log ^| findstr /ev ": 1"'
) do (
echo return code = %%A
echo So do something about it
)
如果由于额外的空格而无法匹配,请尝试:
findstr /rxc:" *return code: *[0-9]* *" test.log | findstr /ev ": 1" >nul && echo Do something
答案 1 :(得分:0)
给定一个包含以下内容的文件test.log:
return code: 33
return code: 1
return code: 4
return code: 5
分析test.log的批处理脚本如下所示:
@echo off
for /F "delims=" %%i in ('findstr /e /v ": 1" test.log') do (
echo %%i
rem do some other command instead of echo
)
线路末尾的Findstr / e开关匹配模式和/ v开关选择除匹配之外的所有内容。结果将是:
return code: 33
return code: 4
return code: 5
编辑
如果文字内容如下所示,我们也希望对文字alternate: 1
执行某些操作,
return code: 33
return code: 1
return code: 4
return code: 5
alternate: 1
我们会像这样做一个微妙的改变:
@echo off
for /F "delims=" %%i in ('findstr /e /v "return code: 1" test.log') do (
echo %%i
rem do some other command instead of echo
)
这样我们就可以提取除return code: 1
之外的所有内容。
编辑2
要在第一个实例之后退出循环,请执行以下操作:
@echo off
for /F "delims=" %%i in ('findstr /e /v "return code: 1" test.txt') do (
echo %%i
goto :eof
)
:eof