fasi2000
Goto Top

Batch Druckername aus variable ausfiltern

Hallo zusamen,

habe auf einem Termianlserver mit Hilfe des Befehls "set var=reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" /v Lexmark* alle verbundenen Lexmark Drucker, die in dem genannten Registry-Schlüssel stehen exportiert.

Allerdings steht nun in der Variable nicht nur der Schlüsselname(Druckername) sondern auch der Datentyp und der Wert des Schlüssels. Es interessiert mich allerdings nur der vollständige Druckername mit Hostbezeichung und Sitzungsnummer.

Die Variable sihet folgendermaßen aus:
"
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
Lexmark Universal PS3 (von PC061) in Sitzung 4 REG_SZ winspool,TS027
Lexmark X850e Kopierraum mitte (von W1091304) in Sitzung 3 REG_SZ winspool,TS022
Lexmark X850e Kopierraum vorne (von W1091304) in Sitzung 3 REG_SZ winspool,TS023
Lexmark X850e Kopierraum hinten (von W1091304) in Sitzung 3 REG_SZ winspool,TS021
Lexmark C782 9901.01.039 (von W1091304) in Sitzung 3 REG_SZ winspool,TS020
Lexmark T650 9901.01.013 (von W1091304) in Sitzung 3(Terminalserver-PostScript-Fallbackdrucker) REG_SZ winspool,TS016
Lexmark T650 Sekretariat S/W (von W1085125) in Sitzung 2(Terminalserver-PostScript-Fallbackdrucker) REG_SZ winspool,TS005
Lexmark C782 Sekretariat Color (von W1085125) in Sitzung 2 REG_SZ winspool,TS015
Lexmark X850e Sekretariat Kopierer (von W1085125) in Sitzung 2 REG_SZ winspool,TS004
Lexmark T652 Sekretariat S/W (von W1085130) in Sitzung 1(Terminalserver-PostScript-Fallbackdrucker) REG_SZ winspool,TS006
Lexmark C782 Sekretariat Color (von W1085130) in Sitzung 1 REG_SZ winspool,TS003
Lexmark X850e Kopierraum vorne (von W1085130) in Sitzung 1 REG_SZ winspool,TS013
Lexmark X850e Sekretariat Kopierer (von W1085130) in Sitzung 1 REG_SZ winspool,TS001

Suchvorgang abgeschlossen: 13 bereinstimmende Zeichenfolge(n) gefunden.
"

Mit welchem Befehl kann ich nur die Druckernamen untereinander ausgeben?

Content-Key: 162495

Url: https://administrator.de/contentid/162495

Printed on: April 25, 2024 at 04:04 o'clock

Member: bastla
bastla Mar 11, 2011 at 14:09:20 (UTC)
Goto Top
Hallo fasi2000 und willkommen im Forum!
Mit welchem Befehl kann ich nur die Druckernamen untereinander ausgeben?
Kommt auf Deine Definition von "Druckernamen" an ...face-wink [Edit] Hat sich nach genauerem Lesen erledigt ... [/Edit]

Das könnte dann etwa so gehen:
@echo on & setlocal enabledelayedexpansion
for /f "delims=" %%i in ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" ^| findstr "Lexmark"') do (  
    set "Drucker="  
    set "Fertig="  
    for %%a in (%%i) do if not defined Fertig (
        if "%%a"=="REG_SZ" (  
            set "Fertig=True"  
        ) else (
            set "Drucker=!Drucker! %%a"  
        )
    )
    echo !Drucker:~1!
)
bzw, wenn die Leerzeichen am Anfang nicht stören würden, einfach
@echo off & setlocal
for /f "delims=	" %%i in ('reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices"^|findstr "HP"') do echo %%i  
Als "delimiter" wird hier ein TAB verwendet ...

Grüße
bastla
Member: fasi2000
fasi2000 Mar 11, 2011 at 18:17:44 (UTC)
Goto Top
vielen Dank,

das funktioniert auf Anhieb schon fast wie ich mir das vorstelle.
Das einzige ist, dass hinter jeder Druckerbezeichnung noch ein Leerzeichen steht.


Und nun zum zweiten Schritt:
Anhand dieser Druckerbezeichnung möchte ich an einer anderen Stelle in der Registierung Werte über reg add setzten.

Die vollständingen Schlüssel heißen z.B.:
HKLM\System\CurrentControlSet\Control\Print\Printers\"Druckername"\PrinterDriverData\DuplexCapability REG_Binary 00

Für "Druckername" soll jeweils die Bezeichnung der Drucker stehen.

Wie kann dies gelößt werden?
Member: bastla
bastla Mar 11, 2011 at 19:01:25 (UTC)
Goto Top
Hallo fasi2000!
Das einzige ist, dass hinter jeder Druckerbezeichnung noch ein Leerzeichen steht.
Ist bei mir nicht so - aber wenn's bei Dir bei jedem Drucker so wäre, könntest Du ja
echo !Drucker:~1,-1!
verwenden (und auf jeden Fall darauf achten, dass nach dem zweiten "!" nicht noch ein Leerzeichen in der Batch-Zeile steht).

Da "echo" eingeschaltet ist, solltest Du außerdem erkennen können, woher diese Leerzeichen stammen ...
Wie kann dies gelößt werden?
Wo genau ist das Problem? Der Druckername steht in der Variablen !Drucker! - daher:
reg add "HKLM\System\CurrentControlSet\Control\Print\Printers\!Drucker!\PrinterDriverData" /v DuplexCapability /t REG_Binary /d 00
Grüße
bastla
Member: fasi2000
fasi2000 Mar 14, 2011 at 07:42:24 (UTC)
Goto Top
Vielen Dank für die schnelle Hilfe, es funktioniert alles Bestens.