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>&1stdout にリダイレクトされます。

この部分"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 に答える