EXIT в пакетном файле не может перезаписывать код возврата предыдущих команд

Запуск этого пакетного файла из командной строки 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. script вместо кода выхода, указанного с помощью команды EXIT (что странно).


спать.летучая мышь:

sleep.py %1

сон.ру:

import sys
import time

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

person robert    schedule 16.07.2014    source источник
comment
Нет, я повторяю из командной строки. Итак, в командной строке я сначала ввожу my_batch_script.bat и запускаю его. Затем я ввожу эхо %errorlevel%. Я только что попробовал отложенное расширение, но, похоже, оно вообще не работает в командной строке (повторение !errorlevel! просто печатает !errorlevel!).   -  person robert    schedule 16.07.2014


Ответы (1)


sleep — это пакетный файл. При вызове пакетного файла из другого пакетного файла таким образом управление никогда не возвращается вызывающей стороне (аналогично exec в POSIX). Вместо этого используйте 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
person Joey    schedule 16.07.2014