尝试使用Windows批处理文件,在下面的代码中找到我在www。
中搜索@ECHO OFF
REM Call this with two arguments, and it will add them.
SET a=%1+%2
IF %ERRORLEVEL%==0 (goto errors-0) ELSE (goto errors-1)
REM Instead of using goto with the variable, this uses an IF-ELSE structure
:errors-0
REM This is if it was successful
ECHO %a%
goto exit
:errors-1
REM this is if it had an error:
ECHO Errors occurred.
goto exit
REM GUESS WHAT, THIS REM WILL NEVER EVER BE READ! IT WILL BE SKIPPED OVER BY THE GOTOS
:exit
ECHO.
ECHO press any key to exit.
PAUSE>nul
代码假设采用2个参数,添加它们并回显结果。
但是这不会在我的Windows 8.1机器上成功执行。以下是我得到的:
C:\ProjectDoc>add3.bat
Errors occurred.
press any key to exit.
因此,U为ERRORLEVEL
添加了一个echo,以便在执行命令SET
后查看其值。以下是输出:
C:\ProjectDoc>add3.bat 2 3
9009
Errors occurred.
press any key to exit.
C:\ProjectDoc>
那么,Windows中的errorlevel
是否等于Linux的$?
。每次成功执行命令时它应该返回0还是不同?阅读一些文档将它与Linux $?
相关联,但它在Linux中并不像$?
那样明显。
答案 0 :(得分:2)
是的,确切地说,%errorlevel%类似于$?在Bash shell中。
在批处理文件中,SET a=%1+%2
没有按照您的预期执行操作。它只是将变量a
的值设置为字符串" 2 + 3"假设您使用参数2 3
运行文件。如果你想做算术,你需要使用/ A选项:set /a a=%1+%2
。
如果实际出现错误,SET命令(以及许多其他内置命令)仅设置ERRORLEVEL。如果成功,ERRORLEVEL将保留其先前的值。我认为这是你在问题中见证的内容。
相反,当命令运行可执行文件时,当进程完成时,它总是设置ERRORLEVEL。
除了检查ERRORLEVEL变量的特定值之外,使用以下表达式检查错误级别是惯用的(出于历史原因)
IF ERRORLEVEL 1 ECHO Hello
如果ERRORLEVEL
为1 或以上,这将运行给定的命令 - 换句话说,如果发生任何错误。