findstr returns no errorlevel when checking build log

Jenkins is calling a batch script. This batch script builds a .NET project with msbuild, which is logged to a logfile.

Now I want to check if the build has failed. Part of this is done with these sort of commands:

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

So the batch script searches the logfile for the string Build FAILED and if it is there, the batch script should exit with exit code 1.

When I look to the output of these files, I see this:

6164:Build FAILED.
"FINDSTRERR: "

and script is running futher. But I am expecting something like "FINDSTRERR: 0".

Why batch / findstr is not working here as expected?

1

1 Answer

FINDSTR will set %ERRORLEVEL% as follows:


0 (False) a match is found in at least one line of at least one file.
1 (True) if a match is not found in any line of any file, (or if the file is not found at all).
2 Wrong syntax
An invalid switch will only print an error message in error stream.


  • But I prefer not to do that with if | else errorlevel [0-2], let me suggest that you try to manipulate the output command using && operators (do this) |or| (do this), when doing this mechanical process, you will do the same as errorlevel (in an if else condition); in addition, it will not be necessary to create a variable (%FINDSTRERR%) and applying its value update.

By doing this jobs with the operators, you can create your own errorlevel 0 | 1 from operators && (1)||(0) according to your behavior:


@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: Successfull^^!! )
"%__APPDIR__%timeout.exe" /t 2 >nul & endlocal && goto :EOF

  • Output case && Build Failed. string match in file.log:
[1] ERROR: Build failed! ^---:> == your errorlevel

  • Output case || Build: Successfull!. string not match in file.log:
[0] Build: Successfull! ^---:> == your errorlevel

Obs.: - Edit: set "LOGFILE=D:\path\to\folder\where\are\the\file_log\target.log", with full drive:/path/to/file.log...


Sorry my limited English

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like