检查进程是否使用批处理文件返回0

时间:2010-12-15 14:35:58

标签: windows process batch-file exit-code

我想用批处理文件启动一个进程,如果它返回非零,则执行其他操作。我需要正确的语法。

这样的事情:

::x.bat

@set RetCode=My.exe
@if %retcode% is nonzero
   handleError.exe

作为奖励,您可以考虑回答以下问题:)

  • 如何使用if撰写复合语句?
  • 如果应用程序My.exe无法启动,因为缺少某些DLL,我的工作是否正常?如果没有,我怎样才能检测到My.exe无法启动?

6 个答案:

答案 0 :(得分:54)

ERRORLEVEL将包含最后一个命令的返回码。可悲的是,你只能检查>=

请注意MSDN documentation for the If statement中的这一行:

  

errorlevel 数字

     

指定true   只有先前的程序才有条件   由Cmd.exe运行返回退出代码   等于或大于 Number

所以要检查0,你需要在框外思考:

IF ERRORLEVEL 1 GOTO errorHandling
REM no error here, errolevel == 0
:errorHandling

或者如果您想先编码错误处理:

IF NOT ERRORLEVEL 1 GOTO no_error
REM errorhandling, errorlevel >= 1
:no_error

有关BAT编程的更多信息:http://www.ericphelps.com/batch/ 或更具体的Windows cmdMSDN using batch files

答案 1 :(得分:14)

  

如何用复合语句写   如果?

您可以使用括号在if块中编写复合语句。第一个括号必须单独出现if和第二个行。

if %ERRORLEVEL% == 0 (
    echo ErrorLevel is zero
    echo A second statement
) else if %ERRORLEVEL% == 1 (
    echo ErrorLevel is one
    echo A second statement
) else (
   echo ErrorLevel is > 1
   echo A second statement
)

答案 2 :(得分:3)

我正在做的项目,我们做这样的事情。我们使用errorlevel关键字,因此看起来像:

call myExe.exe
if errorlevel 1 (
  goto build_fail
)

这似乎对我们有用。请注意,您可以在回调等中添加多个命令。另请注意,build_fail定义为:

:build_fail
echo ********** BUILD FAILURE **********
exit /b 1

答案 3 :(得分:0)

这并不完全是问题的答案,但是每次我想找出如何使我的批处理文件退出并在进程返回非零代码时出错代码时,我都会在这里结束 >。

这是答案:

if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%

答案 4 :(得分:0)

您可以使用以下命令检查它是否返回0或1:

在下面的示例中,我正在检查一个特定文件中的字符串,如果该文件中不存在该特定单词“ Error”,则为1;如果存在则为0

find /i "| ERROR1 |" C:\myfile.txt
echo %errorlevel%

if %errorlevel% equ 1 goto notfound
goto found
:notfound
exit 1
:found
echo we found the text.

答案 5 :(得分:0)

要检查进程/命令是否返回0,请使用运算符&& == 0 or not == 0 ||

只需将运算符添加到脚本中即可:

execute_command && (

       echo\Return 0, with no execution error
) || (
        echo\Return non 0, something went wrong
     )

command && echo\Return 0 || echo\Return non 0