Windows 在Dos脚本中查找和比较?

Windows 在Dos脚本中查找和比较?,windows,shell,batch-file,find,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命令是我必须使用的,但不确定使

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

 return code: 33
 return code: 1
 return code: 4
 return code: 5 
我将命令的结果通过管道传输到日志文件中。所以test.log可以有任何组合 例如,这些行中:

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

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

有人能建议如何编写代码来检查这一点吗

先谢谢你
Matt

给定一个文件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
)
线路末端的s/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
)
通过这种方式,我们提取所有内容,但返回代码:1

编辑2

要在第一个实例后退出循环,请执行以下操作:

@echo off
for /F "delims=" %%i in ('findstr /e /v "return code: 1" test.txt') do (
    echo %%i
    goto :eof
)
:eof

给定包含以下内容的文件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
)
线路末端的s/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
)
通过这种方式,我们提取所有内容,但返回代码: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:“返回代码:[0-9]*“test.log | findstr/ev”:1”>nul&echo做点什么
以下循环允许您对每个非1返回代码采取操作:

for/f“tokens=3 delims=:”%A in(
'findstr/rxc:“返回代码:[0-9]*”test.log^ | findstr/ev:1”'
)做(
回显返回代码=%%A
那就做点什么吧
)
如果由于额外的空格而不匹配,请尝试:

findstr/rxc:*返回代码:[0-9]**“test.log | findstr/ev”:1“>nul&echo做点什么

以下内容将确定日志文件中是否至少存在一个不是1的返回代码:

findstr/rxc:“返回代码:[0-9]*“test.log | findstr/ev”:1”>nul&echo做点什么
以下循环允许您对每个非1返回代码采取操作:

for/f“tokens=3 delims=:”%A in(
'findstr/rxc:“返回代码:[0-9]*”test.log^ | findstr/ev:1”'
)做(
回显返回代码=%%A
那就做点什么吧
)
如果由于额外的空格而不匹配,请尝试:

findstr/rxc:*返回代码:[0-9]**“test.log | findstr/ev”:1“>nul&echo做点什么

您只想检查日志文件中的最后一行,对吗?您只想检查日志文件中的最后一行,对吗?您好,谢谢您的回复-但是日志文件可能包含1的其他实例。。日志文件的内容不仅限于返回代码,所以很抱歉,我忘了提到这一点。日志文件中还有另一个:1与返回代码无关吗?那么这就行不通了?你能详细说明一下你的解决方案吗?嗨,马特,说得好。如果您有另一个:1,我最初发布的代码将不起作用。我添加了一个编辑,这样您可以获得除返回代码:1之外的所有内容。希望这能对你有所帮助。嗨,再次感谢!!!极大地安抚了这一切这很有效,但不知怎的,我陷入了一个无休止的循环。。第一次发生后如何退出?不管出于什么原因,我陷入了一个循环。在我的脚本中,我想说,,所以逻辑应该是。。一旦你发现发生了什么,就这样做,然后退出。对不起,我只想阅读整个文件,如果有任何文本发生的实例,就采取一些行动。当我运行你的代码时。。如果文本有三个实例,它会回显三次。它会循环。这在Linux ShellHi@mattbeyond中非常容易,我添加了一个可怕的
goto
,可能会达到这个目的。您可能想要类似于
grep | head-1…xarg…
等的东西。您使用PowerShell编写的代码非常好;我必须查找命令,如果您愿意,我当然可以。您好,谢谢您的回复-但是日志文件可能包含1的其他实例。。日志文件的内容不仅限于返回代码,所以很抱歉,我忘了提到这一点。日志文件中还有另一个:1与返回代码无关吗?那么这就行不通了?你能详细说明一下你的解决方案吗?嗨,马特,说得好。如果您有另一个:1,我最初发布的代码将不起作用。我添加了一个编辑,这样您可以获得除返回代码:1之外的所有内容。希望这能对你有所帮助。嗨,再次感谢!!!极大地安抚了这一切这很有效,但不知怎的,我陷入了一个无休止的循环。。第一次发生后如何退出?不管出于什么原因,我陷入了一个循环。在我的脚本中,我想说,,所以逻辑应该是。。一旦你发现发生了什么,就这样做,然后退出。对不起,我只想阅读整个文件,如果有任何文本发生的实例,就采取一些行动。当我运行你的代码时。。如果文本有三个实例,它会回显三次。它会循环。这在Linux ShellHi@mattbeyond中非常容易,我添加了一个可怕的
goto
,可能会达到这个目的。您可能想要的是类似于
grep | head-1…xarg…