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
可能重复的字符串