是Windows%ERRORLEVEL%== $?在Linux中

时间:2016-01-15 22:25:19

标签: batch-file

尝试使用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中并不像$?那样明显。

1 个答案:

答案 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 或以上,这将运行给定的命令 - 换句话说,如果发生任何错误。