2

我在编写一个脚本时遇到了一些麻烦,该脚本将找到一个字符串,如果该字符串出现在比先前找到的字符串更高的行号上。

FIND /N "BEGIN" "TEST_LOG.txt" && FIND "[ERROR" TEST_LOG.txt && EXIT /B 255

如果日志已被写入(“BEGIN”将始终出现)并且找到第二个字符串“[ERROR”,则此字符串将首先返回退出代码 255。

因为希望附加到日志文件,所以我只想在行号上查找“[ERROR”> 在 FIND /N“BEGIN”语句中发现的最大行号。

例如,使用这样的日志文件:

BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
[ERROR

我希望代码以错误代码 255 退出。但是,对于这样的日志文件,我不会:

BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
[ERROR
BEGINNING 12:03:45.17
BEGINNING 12:03:45.17
ALL IS WELL!

我期待您的回复,并提前感谢您的帮助。

4

1 回答 1

2

您只需要确定每个字符串出现的最高行号,如果 [ERROR 字符串行号大于 BEGIN. 使用 FOR /F 循环处理 FINDSTR /N 中的每个匹配行并将变量设置为行号。最后处理的比赛获胜,并且将是最高的比赛。您需要两个循环 - 每个搜索字符串一个。

我使用 FINDSTR /B 选项仅在字符串出现在行首时才匹配。显然,如果这不是您的要求,您可以删除该选项。

@echo off
setlocal
set begin=0
set error=0
for /f "delims=:" %%N in ('findstr /nlb BEGIN TEST_LOG.txt') do set /a begin=%%N
for /f "delims=:" %%N in ('findstr /nlb [ERROR TEST_LOG.txt') do set /a error=%%N
if %error% gtr %begin% exit /b 255
于 2012-11-01T10:56:36.850 回答