2

我认为自己非常精通 Windows 批处理编程,但当我得知 Windows XP 可以将负错误代码返回到批处理文件时,我感到很震惊。如果这是真的,我将不得不修复数百个批处理文件。

来源:https ://stackoverflow.com/a/734744/2536047

  1. 有任何证据吗?我从来没有见过一个。
  2. 这是否仅适用于所有较新的 Windows 或 Windows XP?(虽然如果有证据,我希望我能够自己测试它)
4

2 回答 2

5

您可以使用以下方法对其进行测试script.bat

@ECHO Off &SETLOCAL
EXIT /b -1

会话日志:

>输入脚本.bat
@ECHO 关闭 &SETLOCAL
退出 /b -1
>脚本

>回显%错误级别%
-1
于 2013-06-30T08:06:51.597 回答
2

Windows 进程的退出代码是一个 32 位有符号整数,尽管 Microsoft 经常不将它们视为有符号数字。在 MSB 打开时,它们的许多错误代码以十六进制表示。示例:短信错误代码

@Endoro 的例子就是充分的证据。退出代码范围为 [-2147483648,2147483647]。这是一个演示限制的脚本:

SETLOCAL
PROMPT $G$G$G$S

:: [-2147483648,2147483647]

CALL :TEST_EXIT -2147483648
ECHO %ERRORLEVEL%

CALL :TEST_EXIT -2147483649
ECHO %ERRORLEVEL%

CALL :TEST_EXIT 2147483647
ECHO %ERRORLEVEL%

CALL :TEST_EXIT 2147483648
ECHO %ERRORLEVEL%


GOTO :EOF

:TEST_EXIT
EXIT /B %1

...和输出(注意上溢/下溢):

C:\temp\so>SETLOCAL

C:\temp\so>PROMPT $G$G$G$S 

>>> CALL :TEST_EXIT -2147483648 

>>> EXIT /B -2147483648 

>>> ECHO -2147483648 
-2147483648

>>> CALL :TEST_EXIT -2147483649 

>>> EXIT /B -2147483649 

>>> ECHO 2147483647 
2147483647

>>> CALL :TEST_EXIT 2147483647 

>>> EXIT /B 2147483647 

>>> ECHO 2147483647 
2147483647

>>> CALL :TEST_EXIT 2147483648 

>>> EXIT /B 2147483648 

>>> ECHO -2147483648 
-2147483648

>>> GOTO :EOF 
于 2013-07-01T03:53:45.527 回答