尝试使用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代码应该接受两个参数,添加它们并回显结果。
但这不会在我的Windows8.1机器上成功执行。以下是我得到的:
C:\ProjectDoc>add3.bat
Errors occurred.
press any key to exit.因此,U为ERRORLEVEL添加了一个回显,以便在执行SET命令后查看它的值。以下是产出:
C:\ProjectDoc>add3.bat 2 3
9009
Errors occurred.
press any key to exit.
C:\ProjectDoc>所以,errorlevel中的$?等于Linux的$?。对于每个成功执行命令,它应该返回0,还是不同?阅读一些文档与Linux $?有关,但在Linux中它显然不是$?。
发布于 2016-01-15 22:40:48
是的,准确地说,%errorlevel%类似于$?在巴什贝壳里。
在您的批处理文件中,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或以上,这将运行给定的命令-换句话说,如果发生了任何错误。
https://stackoverflow.com/questions/34820907
复制相似问题