我在MSBUILD定義的目標以執行它由多個(接近100個或更多)的xcopy命令的一個批處理文件。批處理文件 - 錯誤代碼
我已經觀察到的MSBuild只在最後XCOPY在批處理文件失敗的情況下失敗。如果任何其他xcopy失敗並且最後一個成功,則MSBUILD認爲構建成功。
有沒有一種辦法,我們可以捕獲所有的錯誤,並在批處理文件的最後返回失敗,這樣可以MSBUILD在批處理文件即使在單一故障失效的任何地方。
感謝 Shravan
我在MSBUILD定義的目標以執行它由多個(接近100個或更多)的xcopy命令的一個批處理文件。批處理文件 - 錯誤代碼
我已經觀察到的MSBuild只在最後XCOPY在批處理文件失敗的情況下失敗。如果任何其他xcopy失敗並且最後一個成功,則MSBUILD認爲構建成功。
有沒有一種辦法,我們可以捕獲所有的錯誤,並在批處理文件的最後返回失敗,這樣可以MSBUILD在批處理文件即使在單一故障失效的任何地方。
感謝 Shravan
的ERRORLEVEL僅由過去的XCOPY命令設置。你需要每個XCOPY
這將嘗試,即使失敗之前所有的XCOPY命令的後記錄ERRORLEVEL:
@ECHO OFF
SET CURRENT_ERROR_LEVEL=0
REM Repeat this for each of your XCOPY commands
xcopy c:\temp\test.* e:\ /Q /Y > nil
SET /A CURRENT_ERROR_LEVEL=%CURRENT_ERROR_LEVEL%+%ERRORLEVEL%
EXIT /B %CURRENT_ERROR_LEVEL%
是的,從AWinkle的解決方案是解決這個問題的正確方法。然而,它要求你每一個您存在XCOPY命令後插入線!下面的批處理文件允許你保存你所有的100+的命令,因爲他們,只是在插入開始的一小段代碼:
@echo off
setlocal EnableDelayedExpansion
rem Locate the beginning of XCOPY commands in this Batch file:
for /F "delims=:" %%a in ('findstr /N /B "XCOPY_COMMANDS" "%~F0"') do set skip=%%a
rem Process the XCOPY commands and accumulate ERRORLEVELS from they all
set AccumulatedErrorLevel=0
for /F "usebackq skip=%skip% delims=" %%a in ("%~F0") do (
%%a
set /A AccumulatedErrorLevel+=!errorlevel!
)
rem Return the accumulated value
exit /B %AccumulatedErrorLevel%
rem Place the original XCOPY commands below next line until the end of this file:
XCOPY_COMMANDS
+1這是漂亮的 – stijn
Xcopy返回錯誤級別1以指示沒有找到要複製的文件。它可能是一個錯誤或不是。 –
端口在批處理文件導入的MSBuild目標作爲任務的邏輯,而不是執行任務。
這將使使你不再隨意複製的未更改的文件100的每一個構建,並使用任務產生更好的輸出,用於診斷PERF問題在路上你的目標來構建增量。
您也可以不使用批處理文件,但將每個xcopy命令放在一個MsBuild Exec任務中 – stijn