No importa cómo lo intenté, el nivel de error siempre permanece en 0 incluso cuando msbuild falló. Entonces construí mi solución:
Compilar proyecto y guardar registro en Build.log
SET Build_Opt=/flp:summary;logfile=Build.log;append=true
msbuild "myproj.csproj" /t:rebuild /p:Configuration=release /fl %Build_Opt%
busque la cadena "0 Error" en el registro de compilación, establezca el resultado en var
FOR /F "tokens=* USEBACKQ" %%F IN (`find /c /i "0 Error" Build.log`) DO (
SET var=%%F
)
echo %var%
obtener el último carácter, que indica cuántas líneas contiene la cadena de búsqueda
set result=%var:~-1%
echo "%result%"
si no se encuentra la cadena, entonces error> 0, falla la compilación
if "%result%"=="0" ( echo "build failed" )
Esa solución se inspiró en la publicación de Mechaflash en Cómo configurar la salida de comandos como una variable en un archivo por lotes
y https://ss64.com/nt/syntax-substring.html