Пакетное программирование, обработка ошибок и команда "Пуск"
Я только начинаю учиться сценарию. Я пытаюсь понять, как система обрабатывает уровни ошибок и как их можно использовать в обработке ошибок. Я знаю, что существует разница между переменной среды %ERRORLEVEL% и уровнем ошибок системы. Если я правильно понимаю, то
If ERRORLEVEL 1
код будет проверять переменную среды, прежде чем проверять уровень ошибки предыдущей команды.
Итак, в моей программе я пытаюсь взаимодействовать с запуском / остановкой скрипт, который запустит / остановит все скрипты данной машины (для тестирования я использую только один блокнот приложения.exe как пример). У меня есть два сценария-оболочки, которые либо запускают, либо останавливают приложения, передавая аргументы независимому сценарию. Если в независимом скрипте есть ошибка, он установит уровень ошибки с помощью
EXIT /B n
сначала я устанавливал %ERRORLEVEL% на ноль вручную, а затем тестировал ошибку после команды START или TASKKILL. Но затем я прочитал, что очистка %ERRORLEVEL% с помощью
SET ERRORLEVEL=
это лучший метод. Моя проблема возникает, когда я пытаюсь запустить приложение с
START "" notepad.exe
всякий раз, когда я тестирую errorlevel после этой команды, он всегда больше или равен 1, Если я не использую SET ERRORLEVEL=0 перед запуском команды start. Я вставил код для четырех сценариев под. Любое понимание и Совет были бы очень признательны.
appstart.летучая мышь:
@echo off
:: Script for application Start
set ERRORLEVEL=
:: ****
:: Additional Batch files will be executed from within this file
:: Example:
:: Call Appbat01.bat
:: The called batch file should set ERRORLEVEL non-zero if error
:: ****
call test.bat -start
if ERRORLEVEL 1 (call error.bat)
echo.
echo Control was returned to appstart.bat...
:: **** End Calls
goto end
:end
appstop.летучая мышь:
@echo off
:: Script for application Start
set ERRORLEVEL=
:: ****
:: Additional Batch files will be executed from within this file
:: Example:
:: Call Appbat01.ba
:: The called batch file should set ERRORLEVEL non-zero if error
:: ****
call test.bat -stop
if ERRORLEVEL 1 (call error.bat)
echo.
echo Control was returned to appstop.bat...
:: **** End Calls
goto end
:end
1 ответов
никогда не следует устанавливать переменную %errorlevel%. Вы правы, что есть разница; уровень ошибок, который вы получаете от процесса выхода, является внутренним регистром, который вы можете прочитать с синтаксисом %errorlevel%. Однако если вы создадите переменную с именем ERRORLEVEL, она замаскирует внутренний регистр и вы потеряете доступ к кодам выхода.
Если вам нужно установить регистр errorlevel в определенное значение, вы можете сделать это со следующим команда:
%comspec% /c exit %value%
это породит процесс, который немедленно завершится с требуемым кодом.