2014-12-09 12 views
6

Ich habe diesen Code in meiner Datei build.batcmd msbuild Errorlevel ist immer 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) 

Mein Problem ist, dass% Errorlevel% immer 0, auch wenn Protokolldatei haben Fehler und Warnungen.

+0

für die fehlerhaften Fälle zu verwenden, was den Wert des Error-ist, bevor Ihr Zustand also könnten Sie vorübergehend ECHO% Error-% vor Ihrer if-Anweisung hinzufügen. –

+0

Verwenden Sie entweder 'SETLOCAL EnableDelayedExpansion' und'! Errorlevel! 'Anstelle von'% errorlevel% 'oder (besser) kehren Sie zur' If ErrorLevel 1' Syntax zurück. Die Einstellung [EnabledDelayedExpansion] (http://ss64.com/nt/setlocal.html) führt dazu, dass jede Variable zur Ausführungszeit und nicht zur Parsezeit erweitert wird: Beim Parsen wertet der Befehlsinterpreter die Variablen _line-by_line_ und/oder _command_by_command_ aber aus Alle Codebausteine ​​in '()' Klammern gelten als ein Befehl. Andererseits sollte 'If ErrorLevel 1' als _if_' ErrorLevel' gelesen werden _ ist größer als oder gleich '1' also _nicht gleich_'0' (_zero_) – JosefZ

+0

Danke für deine Antwort, aber ich habe immer noch ein Problem, wie ich immer 0 im Fehlerlevel sehe. Können Sie bitte die endgültige Version meines Codes als Antwort zur Verfügung stellen? –

Antwort

5

Kommentar von JozefZ half mir:

Verwenden Sie entweder SETLOCAL EnableDelayedExpansion und Errorlevel! anstelle von% errorlevel% oder (besser) zurück zur If ErrorLevel 1 Syntax. Die Einstellung EnabledDelayedExpansion bewirkt, dass jede Variable zur Ausführungszeit und nicht zur Parsezeit erweitert wird: Beim Parsen wertet der Befehlsinterpreter die Variablen line-by_line und/oder command_by_command aus, aber alle Codebausteine ​​in() Klammern gelten als ein Befehl. Auf der anderen Seite, wenn Errorlevel 1 sollte gelesen werden, als ob Errorlevel größer oder gleich 1 ist also nicht gleich 0

0

hatte mir ein wenig, dies zu klären, aber das ist was für mich gearbeitet:

msbuild mySolution.sln 
if errorlevel 1 exit /b errorlevel 

ich brauche nicht SETLOCAL EnableDelayedExpansion