Независимо от того, как я пытался, уровень ошибки всегда остается 0, даже если msbuild не удалось. Итак, я построил мой обходной путь:
Создайте проект и сохраните журнал в Build.log
SET Build_Opt=/flp:summary;logfile=Build.log;append=true
msbuild "myproj.csproj" /t:rebuild /p:Configuration=release /fl %Build_Opt%
искать строку «0 Error» в журнале сборки, установить результат в var
FOR /F "tokens=* USEBACKQ" %%F IN (`find /c /i "0 Error" Build.log`) DO (
SET var=%%F
)
echo %var%
получить последний символ, который указывает, сколько строк содержит строку поиска
set result=%var:~-1%
echo "%result%"
если строка не найдена, то ошибка> 0, сборка не удалась
if "%result%"=="0" ( echo "build failed" )
Это решение было вдохновлено постом Mechaflash в разделе Как настроить вывод команд в качестве переменной в командном файле
и https://ss64.com/nt/syntax-substring.html