2012-01-18 4 views
1

ローカルプリンタがインストールされているかどうかを検出するバッチファイルを作成しています。ローカルプリンタがインストールされているかどうかを検出するためのバッチファイル

For /F "Tokens=1 delims=" %%I In ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" ^|find /I "WPL"') Do If "%%I"=="Printer WPL-606" Goto :EOF 
REM Otherwise Do Stuff 

私はこれを実行すると、私は取得していた結果は次のとおりです。

C:\ DocumentsとSettings \ kalamane> "プリンタ WPL-606 REG_SZのWINSPOOL、Ne07:" 場合== "プリンタWPL-606" 後藤:EOF

C:\ DocumentsとSettings \ kalamane> REMそうでない場合ドゥスタッフ

明らかにそのレジストリエントリからの行の残りはINCLUDですそれは失敗します。

私はスクリプティングには新しく、私が間違っているのはトークンと区切り文字です。ここだけREGクエリが使用されているレジストリからのラインがあります:

誰かが、私はこれは、レジストリの正しい部品を選ぶために得ることについて行くことができる方法を説明することはできますか?

答えて

3

レジストリを照会し、使用しているトークン/デリムを照会すると、行出力全体を取得しています。デリムとしてスペースを設定し、最初の2つのトークンを取得する必要があります。あなたは次のことを望む:

For /F "Tokens=1,2 delims= " %%I In ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" ^|find /I "WPL"') Do (
    If "%%I %%J"=="Printer WPL-606" (
    GOTO:EOF 
) ELSE (
    REM Otherwise Do Stuff 
) 
) 

それともPRNMNGRを使用することができます。これは、プリンタを管理するのに役立つ。\ windows \ system32 \ prnmngr.vbsにローカライズされたVBSスクリプトです(プリンタの一覧を含む)。だから、それはこのように行くだろう:Mechaflashの答えは(prnmngr.vbsについて特に第二部)素晴らしいですが

cscript "C:\WINDOWS\system32\prnmngr.vbs" -l -s \\localhost | FIND /I "WPL-606" 
IF [%errorlevel%] == [0] (
    GOTO:EOF 
) ELSE (
    REM Otherwise Do Stuff 
) 

あなたはPRNMNGR /?

2

でCMDでコマンドをチェックアウトすることができ、PRNMNGRを実行するとまでかかります結果を得るために10秒。

MicrosoftのDevconを使用すると、ほぼ即座に結果が返されます。

For /F "Tokens=1,2 delims=\" %%I In ('devcon.exe findall *WPL-606*') Do (
    If "%%J"=="PRINTERWPL-606" (
    GOTO:EOF 
) ELSE (
    REM Otherwise Do Stuff 
) 
) 

それは私の問題を解決し、このようなバッチファイルを探して、将来の訪問者を助けるので、私は完全にこの答えを含めています: は、ここにそれを使用するように変更されたコードです。私は実際の質問に答えるので、Mechaflashの答えを受け入れています。

+0

私の答えは、依存関係が許可されていないエンタープライズ環境で動作します。= D – Mechaflash

+0

これが私がそれを受け入れた理由の1つです。 – Kalamane

関連する問題