如何从Windows命令返回布尔结果?
我有以下的.bat
文件正被从另一个.vbs
文件调用的命令。我的要求是停止执行以下行,并通过将某些内容写回命令提示符或弹出(如果msbuild/t:clean
未完成执行没有任何问题,则弹出首选项)来通知用户。我想在添加if
条件后执行msbuild/p:configuration=%1
。成功完成后,我还想通过命令提示符或弹出警报通知用户整个过程已成功或失败。这些可以完成吗?如何从Windows命令返回布尔结果?
call "%VS130COMNTOOLS%\vsvars32.bat"
cd c:\working\develop
msbuild/t:clean
msbuild/p:configuration=%1
以下批处理文件应该做你所需要的。它会在每个msbuild作业之后检查是否成功完成,如果作业失败(由errorlevel> 0指示),则通知用户(在CMD窗口中)并退出。当两个作业完成时,它都会告诉用户。
你说,“我已经按照一个bat文件的命令”,所以我认为这是从VBS文件名为蝙蝠,它包括调用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
设置错误级别为0时总是返回错误级别,总是成功的。但是,我删除了该错误,并从msbuild获得错误级别,该错误级别为'0',失败并获得预期结果。谢谢! – Saifur 2014-11-24 16:36:02
@Saifur嗯...只是想确保这段代码适合其他人。如果0这些作业失败,那么'If%errorlevel%NEQ 0'行不起作用 - 'NEQ 0'(不等于0)将检测成功。如果它起作用,那么你的错误级别必须是0.你是否也将'NEQ 0'改为'EQU 0'?如果是,我会在这里修复代码。 thx – sjoy 2014-11-24 19:54:23
@Saifur我认为'set'的概率是'errorlevel = 0'附近的引号。我回答了他们。 – sjoy 2014-11-24 20:01:01
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%
'msbuild'提供一个错误级别? (把'echo%errorlevel%'放到下面一行并试试)大多数程序如果成功则返回'0'或者任何失败返回“非零”。 – Stephan 2014-11-23 08:18:07
@Stephan,我想知道错误代码的一样。几个小时的研究显示了一系列的失败错误代码,但广泛的共识(特别是在MSDN)成功完成返回errorlevel 0. – sjoy 2014-11-23 10:35:43
@sjoy,是的,每个开发人员都可以*选择他们想要的(或使用任何错误级别一个退出代码)。只有认为“0”才能成功,但是一旦我甚至看到错误级别“1”表示“成功”...... – Stephan 2014-11-23 10:47:02