检查构建日志时 findstr 没有返回任何错误级别

检查构建日志时 findstr 没有返回任何错误级别

Jenkins 正在调用批处理脚本。此批处理脚本使用 构建 .NET 项目msbuild,并将其记录到日志文件中。

现在我想检查构建是否失败。部分操作可以通过以下命令完成:

findstr /N /C:"Build FAILED." %LOGFILE%
set "FINDSTRERR=%ERRORLEVEL%"
echo "FINDSTRERR: %FINDSTRERR%"
if "%FINDSTRERR%"=="0" (
    echo "ERROR: Build failed."
    exit 1
)

因此,批处理脚本在日志文件中搜索字符串Build FAILED,如果存在,则批处理脚本应以退出代码退出1

当我查看这些文件的输出时,我看到了以下内容:

6164:Build FAILED.
"FINDSTRERR: "

并且脚本正在进一步运行。但我期待的是类似这样的内容"FINDSTRERR: 0"

为什么 batch/findstr 在这里没有按预期工作?

答案1

FINDSTR 将设置 %ERRORLEVEL% 如下:


0(假)在至少一个文件的至少一行中发现匹配项。

如果在任何文件的任何行中都找不到匹配项(或者根本没有找到该文件),则为 1(真)。

2 语法错误

无效的开关只会在错误流中打印错误消息。


  • 但我不喜欢这样做if | else errorlevel [0-2],我建议你尝试使用以下方法操纵输出命令[&& 运算符(执行此操作)|或|(执行此操作)]2当进行这个机械过程时,你会做同样的事情errorlevel(在 if else 条件中);此外,不需要创建变量(%FINDSTRERR%) 并应用其值更新。

通过与操作员一起完成这项工作,您可以创建自己的errorlevel 0 | 1来自运营商&& (1)||(0)根据您的行为:


@echo off && color 0a && setlocal enabledelayedexpansion & title ...\%~nx0

set "LOGFILE=D:\path\to\folder\where\are\the\file_log\target.log" && echo[

"%__APPDIR__%\findstr.exe" /N /L /C:"Build FAILED\." "!LOGFILE!" >nul && (
echo/ [1] ERROR: Build Failed^^!! ) || (echo/ [0] Build: Successful^^!! )

"%__APPDIR__%timeout.exe" /t 2 >nul & endlocal && goto :EOF


  • 输出情况&& 构建失败。细绳匹配在文件.log中:

[1] ERROR: Build failed!
 ^---:> == your errorlevel

  • 输出情况|| 构建:成功!细绳不匹配在文件.log中:

[0] Build: Successful!
 ^---:> == your errorlevel

观察:- 编辑:set "LOGFILE=D:\path\to\folder\where\are\the\file_log\target.log",充满drive:/path/to/file.log...


或者...

@echo off 

setlocal enabledelayedexpansion

set "LOGFILE=D:\path\to\target.log"

findstr.exe /C:"Build FAILED\." "%LOGFILE%" >nul && (
     echo/ ERROR: Build Failed
   ) || (
     echo/ Build: Successful
   )

endlocal

相关内容