4

我正在尝试编写一个脚本来使用通用驱动程序自动安装打印机。我无法确定要使用哪个通用驱动程序(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)

这个测试总是回应“命令成功”,尽管它显然不是。有没有人有一种体面的方式来处理错误,因为我似乎无法让这些工作。

注意:根据我们组织的执行策略,我不能使用 Powershell。

更新:这是我收到的错误。 在此处输入图像描述

4

1 回答 1

4

似乎您无法解决它,rundll32因为您无法获得状态。

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

wmic PRINTER where name="HP Color LaserJet CP" GET Name

使用 wmic 您应该能够检测是否安装了驱动程序。

要检测错误,您可以使用 FOR/F。
wmic 的错误输出被重定向2>&1到标准输出。

该部分"No instance available."需要修改为您的语言版本的 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
)
于 2013-10-08T14:32:21.137 回答