jeb正確診斷您的問題並提供了一個很好的解決方案。你有其他選擇。
IF ERRORLEVEL 1 ...
(不含百分數)檢查ERRORLEVEL是否大於或等於1.只要msbuild永遠不返回負ERRORLEVEL,就應該工作。
FOR %%C in (
CommonInfrastructure
CommonUtilities
) do (
msbuild /t:%BuildCmdType% %BuildFile% /p:Group=%%C %msbuildLogger% /p:Configuration=Release
if ERRORLEVEL 1 (
msbuild /t:SendFailureMail /p:ErrorLogFileName=%ErrorLog% %BuildFile%
set ErrorBuild=1
)
)
可以測試任何非零值,而無需使用擴展通過使用可變的和IF(NOT)DEFINED
set "success="
FOR %%C in (
CommonInfrastructure
CommonUtilities
) do (
msbuild /t:%BuildCmdType% %BuildFile% /p:Group=%%C %msbuildLogger% /p:Configuration=Release
if errorlevel 0 if not errorlevel 1 set success=1
if not defined success (
msbuild /t:SendFailureMail /p:ErrorLogFileName=%ErrorLog% %BuildFile%
set ErrorBuild=1
)
)
我的優選解決方案是使用||
操作者有條件只有在先前的命令失敗時才執行命令。 (注意 - &&
運營商在成功時有條件執行)
FOR %%C in (
CommonInfrastructure
CommonUtilities
) do (
msbuild /t:%BuildCmdType% %BuildFile% /p:Group=%%C %msbuildLogger% /p:Configuration=Release || (
msbuild /t:SendFailureMail /p:ErrorLogFileName=%ErrorLog% %BuildFile%
set ErrorBuild=1
)
)
系統變量ERRORLEVEL的值是什麼? –
@Vincenzo Maggio:如果msbuild失敗,它將不是0。它工作正常,如果我走出for循環並逐個運行 – Samselvaprabu
您是否嘗試在整個程序執行前將該變量設置爲0? –