wisch
Goto Top

Druckerverwaltung mit Druckerauswahl per Batch

Hallo.

Ich möchte gerne ein Batch-Script erstellen, mit welchem ich die Druckerverwaltung für einen bestimmten Drucker aufrufen kann:
rundll32.exe printui.dll,PrintUIEntry /e /n DRUCKERNAME

Der DRUCKERNAME soll aus einer Liste der vorhandenen Drucker gewählt werden können.
Die Liste hole ich mir aktuell so:
@ECHO OFF
setlocal
set regVar=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices
set count=1
for /f "tokens=1,2* delims=." %%a in ('Reg Query "%regVar%" /S^| findstr /v "HKEY"') do (  
    setlocal EnableDelayedExpansion
    for %%n in (!count!) do (
        ENDLOCAL
        set key[%%n]=%%a
        echo %%n. %%a	
        set /a count+=1		
    )
)

Als Ergebnis kommt eine Liste in der Art von
1.     Microsoft XPS Document Writer    REG_SZ    winspool,Ne02:
2.     Microsoft Print to PDF    REG_SZ    winspool,Ne03:
Wie bekomme ich es nun so hin, dass ich
a) in der Ausgabe nur den Druckernamen ausgebe und
b) dieser in einer Variable für den späteren Aufruf der rundll32.exe verfügbar habe.
Mein Problem dabei ist, dass ich splitten müsste mit einem "delims= " oder "delims=TAB"?
Ggf. im String das "REG_SZ" durch ein Trennzeichen wie ein Semikolon ersetzen und danach splitten?

Vlt. denke ich zu kompliziert und es gibt eine einfachere Lösung... bin für Vorschäge offen.

Danke,
Jörg

Content-ID: 339186

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

rubberman
Lösung rubberman 29.05.2017 um 21:38:02 Uhr
Goto Top
oder "delims=TAB"?
Das ist aber schon lange her, dass dort ein Tab Zeichen zu finden war face-wink

Ggf. im String das "REG_SZ" durch ein Trennzeichen wie ein Semikolon ersetzen
Klar, warum nicht. Bleibt nur noch, die restlichen Leerzeichen am Ende zu eliminieren. Dafür gibt's mehrere Möglichkeiten. bspw.
@ECHO OFF
setlocal
set "regVar=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices"  
set count=0
for /f "tokens=*" %%a in ('Reg Query "%regVar%" /S^| findstr /v "HKEY"') do (  
    set /a count+=1
    set "line=%%a"  
    setlocal EnableDelayedExpansion
    for /f "delims=;" %%b in ("!line:REG_SZ=;!") do (  
        endlocal
        call :setvar %%b
    )
  )
)

setlocal EnableDelayedExpansion
for /l %%i in (1 1 %count%) do echo %%i. "!key[%%i]!"  

pause
exit /b


:setvar
set "key[%count%]=%*"  
exit /b
Grüße
rubberman
WiSch
WiSch 29.05.2017 um 22:06:24 Uhr
Goto Top
Hallo rubberman.

Top, das hat funktioniert.

Jetzt habe ich eine Batchdatei, mit der ich meine Drucker angezeigt bekomme und über eine Auswahl in die entsprechende Druckerverwaltung komme.
Hintergrund war dabei auch die Möglichkeit, dieses Script als Administrator ausführen zu können, ohne permanent als User mit Admin-Rechten zu arbeiten.


Danke und Grüße,
Jörg
114685
114685 29.05.2017 aktualisiert um 22:12:47 Uhr
Goto Top
Hi,

schön, dass es so funktioniert wie du es haben wolltest. Aber nur mal so aus Neugier: Warum würde dir nicht eine Verknüpfung aus
Systemsteuerung > Geräte und Drucker
reichen? Da hast du sogar noch bunte Bildchen dabei face-smile

Gruß
WiSch
WiSch 29.05.2017 um 22:19:52 Uhr
Goto Top
Hallo Hugonatter.

Würde sicher reichen, aber das Script kann ich auf einem Stick von Client zu Client mitnehmen und ich bekomme die dort verfügbaren Drucker angezeigt, dazu die Möglichkeit ohne weiteren Klick oder Verknüpfung zu starten.

Außerdem macht es immer wieder Freude zu sehen, was man mit Batch so alles hinbekommt. ;)


Gruß,
Jörg
114685
114685 29.05.2017 um 22:26:53 Uhr
Goto Top
Hi,

danke für's Feedback.

Die Verknüpfung könntest du IMO auch auf dem Stick mitnehmen, die müsste eigentlich auch überall funktionieren.
Aber egal, du hast was gebastelt und freust dich, das ist doch auch was wert. face-wink

Gruß