在Dos脚本中查找和比较?

时间:2013-09-17 04:21:23

标签: windows shell batch-file find

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

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

我将命令的结果传递到日志文件中。所以test.log将有任何组合 这些行的例子如下:

 return code: 33
 return code: 1

在我的脚本中,我想检查日志文件的内容以及条目代码是否为任何内容 但是1(一个意味着成功)我会做一个动作

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

有人可以建议如何编写代码来检查这个吗?

提前感谢你 马特

2 个答案:

答案 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