我在编写脚本时会遇到一些麻烦,该脚本会找到一个字符串 iff 字符串出现在比以前找到的字符串更高的行号上。
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!
我期待您的回复,并在您的帮助之前感谢您。
答案 0 :(得分: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