Windows 当某个命令显示窗口错误时,我们可以在批处理脚本中捕获错误吗?

Windows 当某个命令显示窗口错误时,我们可以在批处理脚本中捕获错误吗?,windows,batch-file,Windows,Batch File,我面临一个问题。我正在通过批处理脚本安装一些软件。我的脚本文件在下面 msiexec /i "d:\ffr\ff\ff.msi" /qb /NORESTART echo %errorlevel% 此处文件d:\ffr\ff\ff.msi在我的系统中不存在,因此它会显示一个新窗口,并显示错误消息“无法打开安装包。请验证安装包是否存在,以及您是否可以访问它,或者与应用程序供应商联系…” 然后下一行echo%errorlevel%o/p为0 我们可以这样做 IF EXIST "d:\ffr\

我面临一个问题。我正在通过批处理脚本安装一些软件。我的脚本文件在下面

msiexec /i "d:\ffr\ff\ff.msi"  /qb /NORESTART  
echo %errorlevel% 
此处文件d:\ffr\ff\ff.msi在我的系统中不存在,因此它会显示一个新窗口,并显示错误消息“无法打开安装包。请验证安装包是否存在,以及您是否可以访问它,或者与应用程序供应商联系…” 然后下一行echo%errorlevel%o/p为0

我们可以这样做

IF EXIST "d:\ffr\ff\ff.msi" (msiexec /i "d:\ffr\ff\ff.msi"  /qb /NORESTART  )

但是我需要捕捉那个错误消息,或者我的批处理文件中出现错误的任何信息。有办法吗?多谢各位

因此,作为一种解决方案,仅当
ERRORLEVEL
大于0时,才可以打印错误或其他文本

@echo off
SETLOCAL EnableDelayedExpansion
ver > nul
msiexec /i "d:\ffr\ff\ff.msi"  /qb /QUIET /NORESTART
if ERRORLEVEL == 1 echo There was a problem with the command error returned %errorlevel%

单击新窗口上的“确定”后,它将在命令行上显示errorlevel 1619,您不明白吗?不,它始终将errorlevel显示为0。类似于可执行文件之前的Errorlevel:0可执行文件之后的Errorlevel:0重置后的Errorlevel:0这是不可能的。你试过最后一段代码了吗?我试过了
msiexec
根本不接触
%errorlevel%
。(Win 7 Enterprise,两个系统)您可以使用条件运算符
&
(上一个命令成功)和/或
|
(上一个命令失败),即
msiexec/i“d:\ffr\ff\ff.msi”/qb/NORESTART | |(出现错误并暂停和退出/b)
i退出。在批处理文件中工作(带或不带
setlocal
)。不直接在命令行上工作。与@elzoologico的建议相同。