1

我运行一个第三方命令,它在执行后显示如下错误级别:

 return code: 33
 return code: 1
 return code: 4
 return code: 5 

我将命令的结果通过管道传输到日志文件中。因此 test.log 将具有这些行的任意组合,例如:

 return code: 33
 return code: 1

在我的脚本中,我想检查日志文件的内容,如果输入代码不是 1(1 表示成功),我将执行一个操作

我认为 find 命令是我必须使用的,但不确定使用什么语法?基本上逻辑应该是,查看日志文件,如果错误代码不是 1,请执行一些操作。

谁能建议如何编写代码来检查这一点?

提前谢谢你 马特

4

2 回答 2

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
于 2013-09-17T12:50:27.867 回答
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

在下面编辑

如果 text 的内容如下所示,我们也想对 text 做一些事情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
于 2013-09-17T05:10:26.580 回答