我在另一个.bat
文件中调用的.vbs
文件中有以下命令。我的要求是停止执行以下行并通过向命令提示符写回来通知用户或弹出(弹出首选)如果msbuild/t:clean
没有完成执行没有任何问题。我想在之后添加if
条件并执行msbuild/p:configuration=%1
。成功完成后,我还想通过命令提示符或弹出警报通知用户整个过程成功或失败。可以这样做吗?
call "%VS130COMNTOOLS%\vsvars32.bat"
cd c:\working\develop
msbuild/t:clean
msbuild/p:configuration=%1
答案 0 :(得分:4)
以下批处理文件应该可以满足您的需要。它检查每个msbuild作业后是否成功完成,如果作业失败,由errorlevel> 0指示,则通知用户(在CMD窗口中)并退出。当两个工作完成时,它会告诉用户。
你说,“我在bat文件中有以下命令”,所以我假设这是从vbs文件调用的bat,它包括对vsvars32.bat的调用。如果 vsvars32.bat,显然您需要删除该调用并将剩余的代码放入该bat中。
@echo off
cls
echo. &echo
call "%VS130COMNTOOLS%\vsvars32.bat"
cd c:\working\develop
:: Job 1
set errorlevel=0
msbuild/t:clean
If %errorlevel% NEQ 0 set "job=msbuild/t:clean" &goto err
:: Job2
set errorlevel=0
msbuild/p:configuration=%1
If %errorlevel% NEQ 0 set "job=msbuild/p:configuration=%1" &goto err
:: Success
echo msbuild jobs completed successfully
echo Will exit when you press any key. &pause >nul &exit
:err
echo ERROR: %job% failed to complete
echo Will exit when you press any key. &pause >nul
exit
答案 1 :(得分:1)
msbuild
在成功完成时返回零退出代码,并在出现错误时返回非零退出代码,因此应该这样:
call "%VS130COMNTOOLS%\vsvars32.bat"
cd c:\working\develop
msbuild /t:clean
set "rc=%errorlevel%"
if %rc% neq 0 goto END
msbuild /p:configuration=%1
set "rc=%errorlevel%"
:END
exit /b %rc%
或(使用延迟扩展)这样的事情:
setlocal EnableDelayedExpansion
call "%VS130COMNTOOLS%\vsvars32.bat"
cd c:\working\develop
msbuild /t:clean
set "rc=%errorlevel%"
if %rc% equ 0 (
msbuild /p:configuration=%1
set "rc=!errorlevel!"
)
exit /b %rc%