【问题标题】:Find and Comparison in Dos script ?在 Dos 脚本中查找和比较?
【发布时间】:2013-09-17 04:21:23
【问题描述】:

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

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

我将命令的结果通过管道传输到日志文件中。所以 test.log 会有任意组合 以这些行为例:

 return code: 33
 return code: 1

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

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

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

提前致谢 马特

【问题讨论】:

  • 你只想检查日志文件的最后一行,对吧?

标签: windows shell batch-file find


【解决方案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

【讨论】:

  • 这在 Unix 中太容易了 - 有很多时间。我只想读取整个日志文件(我不想循环读取)
  • tstxtract 返回码:33 tstxtract 返回码:2 tstxtract 返回码:0
  • 嗨对不起 - 代码有效,但输出不是我要找的我得到三行输出 tstxtract 返回代码:33 tstxtract 返回代码:2 tstxtract 返回代码:0
  • 基本上我想在找到第一个实例后立即采取行动 - 这看起来像是显示了所有实例.. 它看起来像一个循环
  • 对不起 - 关于上面的 cmets - 它是为其他解决方案测量的 - 你的代码没有找到任何东西 - 它不起作用 - 回声永远不会成功 -
【解决方案2】:

给定一个文件 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 .. 日志文件的内容不仅限于返回代码 - 所以很抱歉我忘了提及.日志文件中还有什么 : 1 与返回码无关?那么这行不通?请您详细说明您的解决方案吗?
  • 嗨@mattbeyond,好点。如果您有另一个: 1,我最初发布的代码将不起作用。我添加了一个编辑,以便您获得除return code: 1 之外的所有内容。希望对您有所帮助。
  • 您好,再次感谢!!!非常感谢这个.. - 这很好用,,但不知何故我进入了一个无限循环.. 第一次发生后我该如何退出?无论出于何种原因,我都会陷入循环。在我的脚本中,我想说,,所以逻辑应该是..一旦你发现发生,就这样做然后退出
  • 抱歉 - 我只想阅读整个文件,如果出现任何文本实例,他们会采取一些措施。当我运行你的代码时..如果有三个文本实例,它会回显它三次。它循环。这在 Linux Shell 中非常简单
  • 嗨@mattbeyond,我添加了一个可怕的goto 可能会成功。你可能想要grep <something> <file> | head -1 ...xarg... 之类的东西。你用PowerShell 编码得很好;我必须查找命令,如果您愿意,我当然可以。
猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多