我想用批处理文件启动一个进程,如果它返回非零,则执行其他操作。我需要正确的语法。
像这样的东西:
::x.bat
@set RetCode=My.exe
@if %retcode% is nonzero
handleError.exe
作为奖励,您可以考虑回答以下问题:)
- 如何用 编写复合语句
if
? - 如果应用程序
My.exe
由于缺少某些 DLL 而无法启动,我的 if 是否可以工作?如果没有,我如何检测到My.exe
无法启动?
我想用批处理文件启动一个进程,如果它返回非零,则执行其他操作。我需要正确的语法。
像这样的东西:
::x.bat
@set RetCode=My.exe
@if %retcode% is nonzero
handleError.exe
作为奖励,您可以考虑回答以下问题:)
if
?My.exe
由于缺少某些 DLL 而无法启动,我的 if 是否可以工作?如果没有,我如何检测到My.exe
无法启动?ERRORLEVEL
将包含最后一个命令的返回码。可悲的是,您只能检查>=
它。
请特别注意MSDN 文档中If
声明的这一行:
错误级别数
仅当 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.ercphelps.com/batch/
或更具体的 Windows cmd
:MSDN 使用批处理文件
如何用if编写复合语句?
您可以使用括号在 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
)
这不完全是问题的答案,但每次我想知道如何让我的批处理文件退出时出现错误代码,当进程返回非零代码时,我都会在这里结束。
所以这是答案:
if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%
我正在做的项目,我们做这样的事情。我们使用errorlevel
关键字,所以它看起来像:
call myExe.exe
if errorlevel 1 (
goto build_fail
)
这似乎对我们有用。请注意,您可以在括号中放入多个命令,例如 echo 或其他。另请注意, build_fail 定义为:
:build_fail
echo ********** BUILD FAILURE **********
exit /b 1
您可以使用以下命令检查它是否返回 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.
要检查进程/命令是否返回 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