批处理文件中的“EXIT”不能覆盖以前命令的返回代码

时间:2014-07-16 12:43:17

标签: windows batch-file exit-code return-code

从Windows命令行运行此批处理文件导致%errorlevel%为5(即在执行批处理文件后在命令行上运行echo %errorlevel%打印数字5):

EXIT /B 5

这很好。

但是,运行此批处理文件会导致%errorlevel%为0,无论如何:

sleep 1
EXIT /B 5

我希望它返回错误代码5.我该怎么做?

注意:如果我将sys.exit(13)添加到sleep.py(见下文),那么第二个批处理文件将返回退出代码为13.所以我的批处理文件将返回,退出代码为sleep.py脚本而不是通过EXIT命令指定的退出代码(这很奇怪)。


sleep.bat:

sleep.py %1

sleep.py:

import sys
import time

if len(sys.argv) == 2:
    time.sleep(int(sys.argv[1]))

1 个答案:

答案 0 :(得分:3)

sleep是一个批处理文件。以这种方式从另一个批处理文件调用批处理文件时,控件永远不会返回给调用者(类似于POSIX中的exec)。请改用call sleep 1

或者只是睡觉内置程序:

:sleep1
setlocal
set /a X=%~1 + 1
ping ::1 -n %X% >nul 2>&1
endlocal
goto :eof

:sleep2
timeout /T %1 /nobreak
goto :eof