"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