Batch file 如何根据错误名称而不是错误级别控制批处理文件的流?

Batch file 如何根据错误名称而不是错误级别控制批处理文件的流?,batch-file,cmd,conda,Batch File,Cmd,Conda,我正在编写第一个批处理文件,并希望根据输出的错误类型提供条件控制流,而不是根据%ERRORLEVEL%NEQ 0 具体来说,我想创建一个从基本环境克隆的conda环境,如果: 由于要克隆的基本环境不存在(CondaEnvironmentNotFoundError),因此进程失败,请在不克隆的情况下创建新环境 进程失败,因为环境已存在(CondaValueError),请完全跳过创建阶段 我想会是这样的: SET /p env_name="What would you like to call

我正在编写第一个批处理文件,并希望根据输出的错误类型提供条件控制流,而不是根据
%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%

我不知道
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
STDOUT
中查找字符串
CondaEnvironmentNotFoundError
,并重定向
STDERR

可能重复的字符串