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


sleep.bat:

sleep.py %1

sleep.py:

import sys
import time

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

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
Другие вопросы по тегам