我正在尝试编写一个脚本来使用通用驱动程序自动安装打印机。我无法确定的是使用哪个通用驱动程序(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)
这个测试总是与'命令成功'相呼应,尽管它显然不是。有没有人有办法处理错误bc我似乎无法让这些工作。
注意:根据我们组织的执行政策,我不能使用Powershell。
更新: 这是我收到的错误。
答案 0 :(得分:4)
似乎您无法使用rundll32
解决问题,因为您无法获得状态。
但您可以使用wmic检索信息。
wmic PRINTER where name="HP Color LaserJet CP" GET Name
使用wmic,您应该能够检测是否安装了驱动程序。
要检测错误,您可以使用FOR / F.
wmic的错误输出被重定向到2>&1
到stdout。
部分"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
)