Windows shell%ERRORLEVEL%变量是否具有字符限制?

时间:2016-12-14 22:34:48

标签: python windows batch-file error-handling cmd

Windows shell具有%ERRORLEVEL%变量,可用于查找已通过shell运行的进程的退出代码。因此,我可以在.bat文件中使用它来获取我在.bat文件中调用的外部脚本的退出代码。我想从我调用的进程(第一个实例中的堆栈跟踪)中返回更丰富的错误信息。我想从我正在运行的Python脚本中返回这个,我可以使用Python' traceback'模块。我可以在%ERRORLEVEL%中持有吗?这个变量有没有文档?

3 个答案:

答案 0 :(得分:2)

%ERRORLEVEL%返回程序的退出代码,即它是一个整数值,没有字符限制。正如wiki document for DOS中提到的那样:

  

在DOS术语中, errorlevel 是可执行程序或子例程返回的整数退出代码。错误级别通常在0到255之间。

Windows section of the same document说:

  

Windows使用32位无符号整数作为退出代码,尽管命令解释程序将它们视为已签名。

答案 1 :(得分:2)

如果您正在寻找返回字符串,则无法为%ERRORLEVEL%分配字符串。有关%ERRORLEVEL% here的文档。

你可以尝试一个环境变量 - 我不会编写python代码,但我确信在Python中有这样的方法,你可以批量访问它们。

此外,如果您事先知道将抛出哪些错误,则可以为每个错误分配一个编号,然后分别退出并分别具有批处理输出。但那很无聊,真的难以理解,所以你可能不想这样做。

答案 2 :(得分:0)

有时%ERRORLEVEL%的下限是-2147483648,例如批处理文件:

set /a ERRORLEVEL = -1
:LOOP
set /a ERRORLEVEL = ERRORLEVEL * 2
REM ERRORLEVEL = %ERRORLEVEL%
@pause
@Goto :LOOP

将输出

REM ERRORLEVEL = -2147483648

之前

REM ERRORLEVEL = 0

但是命令

set /a ERRORLEVEL = -2147483648

返回 “无效的数字。数字仅限于32位精度。”

set /a ERRORLEVEL = -2147483647

有效。