如何从Windows命令返回布尔结果?

时间:2014-11-23 07:05:27

标签: windows batch-file vbscript cmd msbuild

我在另一个.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

2 个答案:

答案 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%