2014-12-09 3 views
6

У меня есть этот код в моем файле build.batCMD MSBuild Равен всегда 0

for /R %~dp0 %%A In (*.sln) do (
c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe %%A /t:rebuild /nologo /verbosity:minimal /flp:Verbosity=detailed;LogFile=%~dp0\Logs.txt;append=true /m /p:Configuration=Debug;Platform="Any CPU" /p:VisualStudioVersion="12.0" 
if not %errorlevel%==0 set Failed+=1 
pause) 

Моя проблема заключается в том, что% ERRORLEVEL% всегда 0, даже если файл журнала есть ошибки и предупреждения.

+0

для ошибочных случаев, что является значение ERRORLEVEL до вашего состояния, т.е. может временно добавить ECHO% ERRORLEVEL% до вашего если заявление. –

+0

Используйте 'SETLOCAL EnableDelayedExpansion' и'! Errorlevel! 'Вместо'% errorlevel% 'или (лучше), чтобы вернуться к синтаксису' If ErrorLevel 1'. Установка [EnabledDelayedExpansion] (http://ss64.com/nt/setlocal.html) приведет к расширению каждой переменной во время выполнения, а не во время разбора: синтаксический анализ, интерпретатор команд оценивает переменные _line-by_line_ и/или _command_by_command_, но весь блок кода в скобках '()' считается одной из команд. С другой стороны, 'If ErrorLevel 1' следует читать как _if_' ErrorLevel' _выше или равно __1, таким образом, не равно _ '0' (_zero_) – JosefZ

+0

Спасибо за ваш ответ, но у меня все еще есть проблема, так как я всегда вижу 0 в области ошибок. Можете ли вы предоставить окончательную версию моего кода в качестве ответа? –

ответ

5

Комментарий JozefZ помог мне:

Используйте либо SETLOCAL EnableDelayedExpansion и Равен! вместо% errorlevel% или (лучше) вернуться к синтаксису IfLevelLevel 1. Установка EnabledDelayedExpansion приведет к расширению каждой переменной во время выполнения, а не во время разбора: синтаксический анализ, интерпретатор команд оценивает переменные line-by_line и/или command_by_command, но весь блок кода в() круглых скобках считается одной командой. С другой стороны, если Равен 1 должен быть читаться как если Равен больше или равно 1, таким образом, не равно 0

0

Взял меня немного, чтобы разобраться в этом, но это то, что работает для меня:

msbuild mySolution.sln 
if errorlevel 1 exit /b errorlevel 

мне не нужно использовать SETLOCAL EnableDelayedExpansion

Смежные вопросы