2012-01-18 18 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腳本,可幫助您管理打印機(包括列出它們)。因此,這將是這樣的:

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

可以在CMD簽出命令PRNMNGR /?

2

雖然Mechaflash的答案是偉大的(特別是關於prnmngr.vbs第二部分),運行PRNMNGR需要長達十秒鐘才能找回結果。

使用微軟的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

確切地說,這就是我接受它的原因之一。 – Kalamane

相關問題