Как управлять потоком командного файла на основе имени ошибки, а не уровня ошибки? - PullRequest
0 голосов
/ 11 октября 2019

Я пишу свой первый пакетный файл и хочу предоставить поток условного управления, основанный на типе выводимой ошибки, а не на %ERRORLEVEL% NEQ 0.

В частности, я хотел бы создать condaсреда, которая клонирована из базовой среды, и если:

  • процесс завершится неудачно, поскольку клонированная базовая среда не существует (CondaEnvironmentNotFoundError), создайте новую среду без клонирования
  • процесс завершается ошибкой, поскольку среда уже существует (CondaValueError), полностью пропустите этап создания

Я думаю, что это выглядело бы примерно так:

SET /p env_name="What would you like to call your environment? "

conda create --clone my-base-env --name %env_name%
IF %ERRORNAME% EQU CondaEnvironmentNotFoundError (
    ECHO Attempting to create a completely new environment
    conda create --name %env_name%
)
ELSE %ERRORNAME% EQU CondaValueError (
    :
)

Что мне делатьдолжны поставить вместо %ERRORNAME%, чтобы это условие работало как положено?

1 Ответ

0 голосов
/ 11 октября 2019

Я ничего не знаю об этой conda вещи, но я могу помочь вам с синтаксисом пакета:

SET /p env_name="What would you like to call your environment? "

conda create --clone my-base-env --name %env_name% 2>&1 |find "CondaEnvironmentNotFoundError" && ( 
    ECHO Attempting to create a completely new environment
    conda create --name %env_name%
) || (
  echo successfully created %env_name%
)

2>&1 перенаправляет STDERR в тот же пункт назначения, что и STDOUT (поскольку следующая команда find обрабатывает только STDOUT)
&& работает как «если предыдущая команда (find) была успешной, то«
|| противоположна: »если предыдущая команда (find) не удалось, затем "
find ищет строку CondaEnvironmentNotFoundError в STDOUT и перенаправляет STDERR

...