在DOS脚本中查找和比较?

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

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

我把命令的结果input到一个日志文件中。 所以test.log将会有这些行的任意组合:

  return code: 33 return code: 1 

在我的脚本中,我想检查日志文件的内容,如果入口代码是除1之外的任何东西(一个意味着成功),我会做一个动作

我认为find命令是我必须使用,但不知道使用什么语法? 基本上,逻辑应该是,查看日志文件,如果错误代码是什么,但1做一些行动。

任何人都可以build议如何编写代码来检查这个?

提前感谢你马特

给定一个文件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 

以下内容将确定日志文件中是否至少存在一个不是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