Batch file 无法从PrintUI.dll、PrintUIEntry捕获异常

Batch file 无法从PrintUI.dll、PrintUIEntry捕获异常,batch-file,printing,error-handling,cmd,Batch File,Printing,Error Handling,Cmd,我正在尝试编写一个脚本,使用通用驱动程序自动安装打印机。我无法确定使用哪个通用驱动程序(PS或PCL)。因此,我尝试在批处理脚本中处理此问题。我首先尝试安装PCL驱动程序,如果失败,则安装PS驱动程序。当我尝试从PrintUI.dll捕获异常时,会出现问题 @rundll32 printui.dll,PrintUIEntry /if /b "1.2.3.4 - HP Color LaserJet CP5225n" /f "C:\Windows\System32\DriverStore\FileR

我正在尝试编写一个脚本,使用通用驱动程序自动安装打印机。我无法确定使用哪个通用驱动程序(PS或PCL)。因此,我尝试在批处理脚本中处理此问题。我首先尝试安装PCL驱动程序,如果失败,则安装PS驱动程序。当我尝试从PrintUI.dll捕获异常时,会出现问题

@rundll32 printui.dll,PrintUIEntry /if /b "1.2.3.4 - HP Color LaserJet CP5225n" /f "C:\Windows\System32\DriverStore\FileRepository\hpcu130u.inf_amd64_neutral_33833446aad0d0f1\hpcu130.inf" /r "IP_1.2.3.4" /m "HP Universal Printing PCL 6" 
对于给定的打印机,这将失败,因为它需要PS驱动程序。但是,如果我检查
%ERRORLEVEL%
始终为0。如果我尝试以下错误处理,结果是成功的命令,但会抛出一个错误,打印机未安装,因此不成功:

@rundll32 printui.dll,PrintUIEntry /if /b "1.2.3.4 - HP Color LaserJet CP5225n" /f "C:\Windows\System32\DriverStore\FileRepository\hpcu130u.inf_amd64_neutral_33833446aad0d0f1\hpcu130.inf" /r "IP_1.2.3.4" /m "HP Universal Printing PCL 6" 
&& (echo Command Successful) || (echo Command Failed)
这个测试总是呼应“Command successful”(命令成功),尽管它显然不是。是否有人有一个体面的方法来处理错误,因为我似乎无法让这些工作

注意:我不能按照我们组织的执行策略使用Powershell

更新: 这是我收到的错误。
您似乎无法通过运行
来解决此问题,因为您无法获取状态

但是您可以使用wmic检索信息

wmic PRINTER where name="HP Color LaserJet CP" GET Name
使用wmic,您应该能够检测是否安装了驱动程序

检测可用于/F的错误。
wmic的错误输出通过
2>&1
重定向到标准输出

“无可用实例”部分。
需要修改为您的wmic语言版本

set failure=0
for /F "usebackq delims=" %%L in (`"wmic PRINTER where name='HP Color LaserJet CP' GET Name 2>&1"`) do (
    if "%%L"=="No instance available." set failure=1
)

您是否可以将
rundll32 printui.dll的输出重定向到一个文件,并且成功安装和不成功安装的输出是否不同?如果重定向stdout或stderr,则不会将任何内容写入我的文本文件。此命令会弹出一个异常窗口,但就好像batch不知道抛出了错误一样。是否有办法将其存储到我的文本文件中一个变量并检查该值为此添加了一个示例。+1工作得很好。批处理中的If-Else语句是其他语句。