Batch- & CMD-Druckerskripte – © M. Meili

Lernhilfe: Grundlagen verstehen & fertige Skripte nachschlagen

Diese Seite zeigt fertige Windows-Batch-Skripte (.cmd) für die Druckerverwaltung – gedacht zum Nachschlagen, Kopieren und Verstehen. Zuerst kommen die Grundbausteine (Variablen, Bedingungen, Schleifen …), dann 12 komplette Drucker-Skripte und schliesslich Erweiterungen.
Befehl %Variable% "Text" :Sprungmarke REM Kommentar

A · Batch-Grundlagen – die Bausteine der Skripte

A1. Grundgerüst & Kommentare

Der Aufbau jedes Skripts
@echo off REM ============================================================ REM Dies ist ein Kommentar - wird nicht ausgefuehrt REM ============================================================ :: Doppelpunkt-Doppelpunkt geht auch als Kommentar echo Hallo Welt! echo. echo Naechste Zeile nach einer Leerzeile. cls pause
Eingabeaufforderung
Hallo Welt! Naechste Zeile nach einer Leerzeile. Druecken Sie eine beliebige Taste . . .
@echo off unterdrückt die Anzeige der Befehle selbst – man sieht nur die Ausgabe. REM und :: sind Kommentare. echo. (mit Punkt) erzeugt eine Leerzeile. cls leert den Bildschirm, pause wartet auf einen Tastendruck.

A2. Variablen & Eingaben

Werte speichern und abfragen
@echo off REM -- Variable setzen (KEINE Leerzeichen um das =) -- SET DRUCKER_NAME=Mein_Netzwerkdrucker REM -- Variable verwenden: in Prozentzeichen einschliessen -- echo Der Drucker heisst: %DRUCKER_NAME% REM -- Benutzer nach Eingabe fragen -- set /p ANTWORT=Wie heisst der Drucker? echo Du hast eingegeben: %ANTWORT% REM -- Trick: Datum in Dateinamen (JJJJMMTT) -- SET DATUM=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2% echo Heutiges Datum als Zahl: %DATUM%
Eingabeaufforderung
Der Drucker heisst: Mein_Netzwerkdrucker Wie heisst der Drucker? Buero_Laser Du hast eingegeben: Buero_Laser Heutiges Datum als Zahl: 20260730
Mit SET Name=Wert speicherst du etwas, mit %Name% liest du es wieder aus. set /p fragt den Benutzer. Der Ausdruck %DATE:~6,4% schneidet ab Position 6 vier Zeichen aus dem Datum heraus – so entstehen eindeutige Dateinamen.
💡 Merke: Rund um das = dürfen keine Leerzeichen stehen, sonst gehören sie zum Wert.

A3. Bedingungen (IF / ELSE)

Entscheidungen im Skript
@echo off REM -- War der letzte Befehl erfolgreich? (0 = ja) -- IF %ERRORLEVEL% EQU 0 ( echo Alles hat geklappt. ) ELSE ( echo Es ist ein Fehler aufgetreten. ) REM -- Gibt es einen Ordner / eine Datei? -- IF EXIST "C:\Temp" ( echo Ordner vorhanden. ) ELSE ( mkdir "C:\Temp" ) REM -- Text vergleichen (/i = Gross/Klein egal) -- set /p OK=Fortfahren? (J/N): if /i "%OK%"=="J" ( echo Weiter geht's! ) else ( echo Abbruch. )
%ERRORLEVEL% ist 0, wenn der letzte Befehl fehlerfrei war. Vergleichs­operatoren: EQU (gleich), NEQ (ungleich), GTR (grösser), LSS (kleiner). IF EXIST prüft Dateien/Ordner, /i ignoriert Gross-/Kleinschreibung beim Textvergleich.

A4. Schleifen & Sprungmarken

Etwas wiederholen
@echo off REM -- FOR: ueber eine Liste laufen (%%I in Skripten, %I in der Konsole) -- FOR %%I IN (192.168.1.100 192.168.1.101 192.168.1.102) DO ( echo Pruefe Adresse: %%I ) REM -- Sprungmarke + goto = Endlosschleife (Abbruch mit STRG+C) -- :SCHLEIFE echo Ueberwache Drucker... timeout /t 5 /nobreak > nul goto SCHLEIFE
Eingabeaufforderung
Pruefe Adresse: 192.168.1.100 Pruefe Adresse: 192.168.1.101 Pruefe Adresse: 192.168.1.102 Ueberwache Drucker...
FOR ... IN (...) DO wiederholt etwas für jeden Eintrag. In einer Skriptdatei schreibt man %%I, direkt in der Konsole nur %I. Eine :Sprungmarke zusammen mit goto baut eine Schleife – ideal zum Überwachen.
⚠️ Achtung: Endlosschleifen laufen ewig – immer eine Ausstiegsbedingung oder STRG+C einplanen.

A5. Ein-/Ausgabe & Umleitung

Ausgaben in Dateien lenken
@echo off REM -- > ueberschreibt die Datei (neu anlegen) -- echo Erste Zeile > "C:\Temp\bericht.txt" REM -- >> haengt an die Datei an -- echo Zweite Zeile >> "C:\Temp\bericht.txt" echo Dritte Zeile >> "C:\Temp\bericht.txt" REM -- > nul verwirft die Ausgabe (macht das Skript "leise") -- timeout /t 3 /nobreak > nul REM -- 2>&1 leitet auch Fehlermeldungen mit um -- ping 192.168.1.100 > "C:\Temp\ping.txt" 2>&1 REM -- | (Pipe) reicht die Ausgabe an den naechsten Befehl weiter -- powershell -Command "Get-Printer | Format-Table -AutoSize"
> erstellt/überschreibt eine Datei, >> hängt hinten an, > nul wirft unerwünschte Ausgaben weg, 2>&1 nimmt auch Fehlermeldungen mit auf, und die Pipe | gibt das Ergebnis eines Befehls direkt an den nächsten weiter.

A6. PowerShell in Batch nutzen

Die Brücke zu modernen Befehlen
@echo off REM Viele Drucker-Aufgaben gibt es nur als PowerShell-Befehl (Cmdlet). REM Aus einem .cmd-Skript ruft man PowerShell so auf: powershell -Command "Get-Printer | Select-Object Name, PrinterStatus" REM -- Ergebnis einer PowerShell-Zeile in eine Batch-Variable holen -- FOR /F %%C IN ('powershell -Command "(Get-Printer).Count"') DO SET ANZAHL=%%C echo Es sind %ANZAHL% Drucker installiert.
Batch ist alt, aber überall verfügbar; die modernen Drucker-Befehle stecken in PowerShell-Cmdlets wie Get-Printer oder Add-Printer. Mit powershell -Command "..." ruft man sie aus dem .cmd auf. FOR /F fängt das Ergebnis ein und speichert es in einer Variable.
💡 Faustregel: Innerhalb der PowerShell-Anführungszeichen für Text am besten einfache Anführungszeichen '...' nutzen, damit sich die beiden Anführungszeichen-Arten nicht in die Quere kommen.

B · 12 fertige Drucker-Skripte

1. Drucker hinzufügen ADMIN

Netzwerkdrucker über TCP/IP anlegendrucker_hinzufuegen.cmd
@echo off REM ============================================================ REM Aufgabe 1: Netzwerkdrucker hinzufuegen REM Ausfuehren als: Administrator REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker SET DRUCKER_IP=192.168.1.100 SET TREIBER_NAME=Generic / Text Only REM -- Schritt 1: TCP/IP-Port erstellen -- powershell -Command "Add-PrinterPort -Name 'IP_%DRUCKER_IP%' -PrinterHostAddress '%DRUCKER_IP%'" REM -- Schritt 2: Drucker hinzufuegen -- powershell -Command "Add-Printer -Name '%DRUCKER_NAME%' -DriverName '%TREIBER_NAME%' -PortName 'IP_%DRUCKER_IP%'" REM -- Rueckmeldung -- IF %ERRORLEVEL% EQU 0 ( echo Drucker '%DRUCKER_NAME%' wurde erfolgreich hinzugefuegt. ) ELSE ( echo FEHLER: Drucker konnte nicht hinzugefuegt werden. echo Tipp: Ist der Treiber installiert? ) pause
Beispiel-Ausgabe
Drucker 'Mein_Netzwerkdrucker' wurde erfolgreich hinzugefuegt. Druecken Sie eine beliebige Taste . . .
Zuerst wird ein Port (die „Adresse" des Druckers) erstellt, dann der Drucker mit diesem Port und einem Treiber verbunden. Danach prüft IF %ERRORLEVEL%, ob alles geklappt hat.
🎯 Tipp: Der Treiber muss bereits installiert sein. Im Zweifel „Generic / Text Only" verwenden.

2. Drucker entfernen ADMIN

Mit Sicherheitsabfrage vor dem Löschendrucker_entfernen.cmd
@echo off REM ============================================================ REM Aufgabe 2: Drucker entfernen REM Ausfuehren als: Administrator REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker SET DRUCKER_IP=192.168.1.100 echo Achtung: Drucker '%DRUCKER_NAME%' wird entfernt! set /p BESTAETIGUNG=Bestaetigen mit J (Ja) oder N (Nein): if /i NOT "%BESTAETIGUNG%"=="J" ( echo Vorgang abgebrochen. pause exit /b ) powershell -Command "Remove-Printer -Name '%DRUCKER_NAME%'" REM -- TCP/IP-Port entfernen (Nein = auskommentiert lassen) -- REM powershell -Command "Remove-PrinterPort -Name 'IP_%DRUCKER_IP%'" echo Drucker '%DRUCKER_NAME%' wurde erfolgreich entfernt. pause
Beispiel-Ausgabe
Achtung: Drucker 'Mein_Netzwerkdrucker' wird entfernt! Bestaetigen mit J (Ja) oder N (Nein): J Drucker 'Mein_Netzwerkdrucker' wurde erfolgreich entfernt.
Die Sicherheitsabfrage (set /p + if /i NOT ... exit /b) verhindert versehentliches Löschen. Das Entfernen des Ports ist bewusst auskommentiert – nur bei Bedarf das REM löschen.

3. Status abfragen KEIN ADMIN

Zustand eines und aller Drucker anzeigendrucker_status.cmd
@echo off REM ============================================================ REM Aufgabe 3: Druckerstatus abfragen REM Kein Administratorrecht erforderlich REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker echo ============================================ echo Druckerstatus-Abfrage echo ============================================ echo. echo Status von '%DRUCKER_NAME%': echo -------------------------------------------- powershell -Command "Get-Printer -Name '%DRUCKER_NAME%' | Select-Object Name, PrinterStatus, JobCount, PortName, DriverName | Format-List" echo. echo Alle installierten Drucker: echo -------------------------------------------- powershell -Command "Get-Printer | Select-Object Name, PrinterStatus, Default | Format-Table -AutoSize" pause
Beispiel-Ausgabe
Status von 'Mein_Netzwerkdrucker': -------------------------------------------- Name : Mein_Netzwerkdrucker PrinterStatus : Normal JobCount : 0 PortName : IP_192.168.1.100 DriverName : Generic / Text Only Alle installierten Drucker: -------------------------------------------- Name PrinterStatus Default ---- ------------- ------- Mein_Netzwerkdrucker Normal True Microsoft Print to PDF Normal False
Reine Abfrage – ohne Adminrechte. Format-List zeigt Details untereinander, Format-Table als kompakte Tabelle. Mögliche Statuswerte: Normal, Error, Offline.

4. Druckaufträge verwalten ADMIN

Warteschlange anzeigen und leerendruckauftraege_loeschen.cmd
@echo off REM ============================================================ REM Aufgabe 4: Druckauftraege verwalten und loeschen REM Ausfuehren als: Administrator REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker echo Aktuelle Druckauftraege fuer '%DRUCKER_NAME%': echo -------------------------------------------- powershell -Command "Get-PrintJob -PrinterName '%DRUCKER_NAME%' | Select-Object Id, DocumentName, UserName, Status | Format-Table -AutoSize" echo. echo Loesche alle Auftraege fuer '%DRUCKER_NAME%'... powershell -Command "Get-PrintJob -PrinterName '%DRUCKER_NAME%' | Remove-PrintJob" REM -- Methode 2 (Notfall, auskommentiert): loescht ALLE Drucker -- REM net stop spooler REM del /Q /F /S "%systemroot%\System32\spool\PRINTERS\*.*" REM net start spooler echo. echo Warteschlange nach dem Loeschen: echo -------------------------------------------- powershell -Command "Get-PrintJob -PrinterName '%DRUCKER_NAME%' | Format-Table -AutoSize" echo Vorgang abgeschlossen. pause
Beispiel-Ausgabe
Aktuelle Druckauftraege fuer 'Mein_Netzwerkdrucker': -------------------------------------------- Id DocumentName UserName Status -- ------------ -------- ------ 3 Rechnung.pdf meili Normal Loesche alle Auftraege fuer 'Mein_Netzwerkdrucker'... Warteschlange nach dem Loeschen: -------------------------------------------- Vorgang abgeschlossen.
Methode 1 löscht nur die Aufträge dieses Druckers. Die auskommentierte Methode 2 startet den Druckwarteschlangen-Dienst (Spooler) neu – das entfernt Aufträge aller Drucker und ist nur für Notfälle.

5. Einstellungen ändern ADMIN

Qualität & Papierformat, mit Backupdrucker_einstellungen.cmd
@echo off REM ============================================================ REM Aufgabe 5: Druckereinstellungen aendern REM Ausfuehren als: Administrator (Windows 10/11) REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker REM -- Backup der aktuellen Einstellungen -- rundll32 printui.dll,PrintUIEntry /Ss /n "%DRUCKER_NAME%" /a "%TEMP%\%DRUCKER_NAME%_backup.dat" echo Backup gespeichert: %TEMP%\%DRUCKER_NAME%_backup.dat echo. REM -- Druckqualitaet (DPI) und Papierformat setzen -- REM PrintQuality: 150=Entwurf 300=Niedrig 600=Mittel 1200=Hoch echo Setze Druckqualitaet auf 150 (Entwurf) DPI und Papierformat A4... powershell -Command "Set-PrintConfiguration -PrinterName '%DRUCKER_NAME%' -PrintQuality 150 -PaperSize A4" echo. echo Aktuelle Einstellungen: powershell -Command "Get-PrintConfiguration -PrinterName '%DRUCKER_NAME%' | Select-Object PrinterName, PrintQuality, PaperSize, Collate, DuplexingMode | Format-List" REM -- Wiederherstellen (REM entfernen um zu aktivieren) -- REM rundll32 printui.dll,PrintUIEntry /Sr /n "%DRUCKER_NAME%" /a "%TEMP%\%DRUCKER_NAME%_backup.dat" pause
Beispiel-Ausgabe
Backup gespeichert: C:\Users\meili\AppData\Local\Temp\Mein_Netzwerkdrucker_backup.dat Setze Druckqualitaet auf 150 (Entwurf) DPI und Papierformat A4... Aktuelle Einstellungen: PrinterName : Mein_Netzwerkdrucker PrintQuality : 150 PaperSize : A4 Collate : True DuplexingMode : OneSided
Vor der Änderung wird ein Backup im %TEMP%-Ordner abgelegt – falls etwas schiefgeht, stellt die letzte (auskommentierte) Zeile alles wieder her. Niedrige DPI sparen Tinte, hohe sind für Fotos.

6. Infos exportieren KEIN ADMIN

Alle Drucker in eine Textdatei schreibendrucker_exportieren.cmd
@echo off REM ============================================================ REM Aufgabe 6: Druckerinformationen exportieren (ASCII) REM ============================================================ REM -- Ausgabe-Zeichensatz der Konsole auf ANSI setzen -- chcp 1252 > nul REM -- Datum fuer Dateinamen (Format: JJJJMMTT) -- SET DATUM=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2% SET AUSGABE=C:\Temp\Drucker_Info_%DATUM%.txt IF NOT EXIST "C:\Temp" mkdir "C:\Temp" echo ======================================== > "%AUSGABE%" echo Druckerinformationen >> "%AUSGABE%" echo Erstellt am: %DATE% um %TIME% >> "%AUSGABE%" echo Computer: %COMPUTERNAME% >> "%AUSGABE%" echo ======================================== >> "%AUSGABE%" echo. >> "%AUSGABE%" echo [1] Installierte Drucker (Uebersicht): >> "%AUSGABE%" powershell -Command "Get-Printer | Select-Object Name,PrinterStatus,PortName,DriverName,Default | Format-Table -AutoSize | Out-String | Out-File -FilePath '%AUSGABE%' -Encoding ASCII -Append" echo Export abgeschlossen: %AUSGABE% start notepad "%AUSGABE%" pause
Beispiel-Ausgabe
Export abgeschlossen: C:\Temp\Drucker_Info_20260730.txt (Notepad oeffnet die Datei automatisch)
Der Datums-Trick (%DATE:~6,4%) erzeugt einen eindeutigen Dateinamen. chcp 1252 und -Encoding ASCII sorgen für einheitliche Schrift in Notepad – sonst mischen sich Zeichensätze und Umlaute werden unleserlich.

7. Warteschlange überwachen KEIN ADMIN

Dauerhafte Überwachung mit Warnungwarteschlange_ueberwachen.cmd
@echo off REM ============================================================ REM Aufgabe 7: Druckerwarteschlange ueberwachen REM Beenden: CTRL+C druecken REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker SET INTERVALL=30 SET MAX_AUFTRAEGE=5 echo Ueberwachung gestartet fuer: %DRUCKER_NAME% echo Intervall: %INTERVALL% Sek. | Warnung ab: %MAX_AUFTRAEGE% Auftraegen echo Beenden mit CTRL+C echo ============================================ :SCHLEIFE FOR /F %%C IN ('powershell -Command "(Get-PrintJob -PrinterName '%DRUCKER_NAME%').Count"') DO SET ANZAHL=%%C IF "%ANZAHL%"=="0" ( echo [%TIME%] OK - Warteschlange ist leer. ) ELSE ( IF %ANZAHL% GTR %MAX_AUFTRAEGE% ( echo [%TIME%] WARNUNG! %ANZAHL% Auftraege in der Warteschlange! powershell -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('WARNUNG: Druckerwarteschlange hat %ANZAHL% Auftraege!', 'Drucker-Monitor', 'OK', 'Warning')" ) ELSE ( echo [%TIME%] INFO - %ANZAHL% Auftraege in der Warteschlange. ) ) timeout /t %INTERVALL% /nobreak > nul goto SCHLEIFE
Beispiel-Ausgabe
Ueberwachung gestartet fuer: Mein_Netzwerkdrucker Intervall: 30 Sek. | Warnung ab: 5 Auftraegen ============================================ [14:22:01] OK - Warteschlange ist leer. [14:22:31] INFO - 2 Auftraege in der Warteschlange. [14:23:01] WARNUNG! 6 Auftraege in der Warteschlange!
Vereint fast alle Grundlagen: Schleife (:SCHLEIFE/goto), Wert einfangen (FOR /F), Bedingung (IF ... GTR) und ein Popup über die Windows.Forms-MessageBox. timeout legt die Pause fest.

8. Netzwerk-Ping-Check ERWEITERUNG

Prüfen, welche Drucker online sinddrucker_ping_check.cmd
@echo off REM ============================================================ REM Erweiterung 8: Netzwerk-Ping-Check fuer Drucker REM Modus: Einzelne IPs (kommagetrennt) REM Kein Administratorrecht erforderlich REM ============================================================ chcp 1252 > nul SET AUSGABE=C:\Temp\Drucker_Ping_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.txt SET PING_COUNT=2 IF NOT EXIST "C:\Temp" mkdir "C:\Temp" echo ======================================== > "%AUSGABE%" echo Drucker Ping-Check >> "%AUSGABE%" echo Erstellt am: %DATE% um %TIME% >> "%AUSGABE%" echo ======================================== >> "%AUSGABE%" echo Starte Ping-Check... echo. REM -- IP-Adressen einzeln pruefen -- FOR %%I IN (192.168.1.100 192.168.1.101 192.168.1.102) DO ( ping -n %PING_COUNT% -w 1000 %%I > nul 2>&1 IF ERRORLEVEL 1 ( echo [%TIME%] OFFLINE: %%I >> "%AUSGABE%" echo [OFFLINE] %%I ) ELSE ( echo [%TIME%] ONLINE: %%I >> "%AUSGABE%" echo [ONLINE ] %%I ) ) echo. echo Bericht gespeichert: %AUSGABE% start notepad "%AUSGABE%" pause
Beispiel-Ausgabe
Starte Ping-Check... [ONLINE ] 192.168.1.100 [ONLINE ] 192.168.1.101 [OFFLINE] 192.168.1.102 Bericht gespeichert: C:\Temp\Drucker_Ping_20260730.txt
Hier arbeiten FOR (durch die IP-Liste laufen), ping und IF ERRORLEVEL 1 zusammen. Wichtig: Bei mehreren Vergleichsstufen gilt IF ERRORLEVEL 1 = „Rückgabewert 1 oder grösser".
💡 Original-Erweiterung: Der Generator kann auch einen ganzen IP-Bereich (z.B. .1 bis .50) per PowerShell Test-Connection prüfen.

9. Treiber-Inventar ERWEITERUNG

Alle Treiber dokumentierentreiber_inventar.cmd
@echo off REM ============================================================ REM Erweiterung 9: Druckertreiber-Inventar exportieren REM Kein Administratorrecht erforderlich REM ============================================================ chcp 1252 > nul SET DATUM=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2% SET AUSGABE=C:\Temp\Treiber_Inventar_%DATUM%.txt IF NOT EXIST "C:\Temp" mkdir "C:\Temp" echo ======================================== > "%AUSGABE%" echo Druckertreiber-Inventar >> "%AUSGABE%" echo Erstellt am: %DATE% um %TIME% >> "%AUSGABE%" echo Computer: %COMPUTERNAME% >> "%AUSGABE%" echo ======================================== >> "%AUSGABE%" echo. >> "%AUSGABE%" echo [1] Installierte Druckertreiber: >> "%AUSGABE%" powershell -Command "Get-PrinterDriver | Select-Object Name,Manufacturer,MajorVersion | Sort-Object Name | Format-Table -AutoSize | Out-String | Out-File -FilePath '%AUSGABE%' -Encoding ASCII -Append" echo Treiber-Inventar gespeichert: %AUSGABE% start notepad "%AUSGABE%" pause
Inhalt der Textdatei
Name Manufacturer MajorVersion ---- ------------ ------------ Generic / Text Only Microsoft 4 HP Universal Printing PCL 6 HP 3 Microsoft Print To PDF Microsoft 4
Ideal vor Windows-Updates oder Migrationen: Man dokumentiert, welche Treiber installiert sind. Sort-Object sortiert alphabetisch, Out-File -Append hängt an die Berichtsdatei an.

10. Standard-Drucker setzen ERWEITERUNG

Einen Drucker zum Standard machenstandard_drucker_setzen.cmd
@echo off REM ============================================================ REM Erweiterung 10: Standard-Drucker setzen REM Kein Administratorrecht erforderlich REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker REM -- Windows-Einstellung "Standard selbst verwalten" deaktivieren -- powershell -Command "Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows' -Name 'LegacyDefaultPrinterMode' -Value 1" REM -- Standard-Drucker setzen -- powershell -Command "(New-Object -ComObject WScript.Network).SetDefaultPrinter('%DRUCKER_NAME%')" echo. echo Standarddrucker wurde auf '%DRUCKER_NAME%' gesetzt. pause
Beispiel-Ausgabe
Standarddrucker wurde auf 'Mein_Netzwerkdrucker' gesetzt. Druecken Sie eine beliebige Taste . . .
Zuerst wird verhindert, dass Windows automatisch den zuletzt benutzten Drucker wählt; danach wird der gewünschte Drucker fest als Standard gesetzt.
🎯 Praxis-Idee: Mehrere Kopien anlegen – z.B. Standard_Raum101.cmd und Standard_Raum202.cmd. Ein Doppelklick wechselt dann den Standarddrucker.

11. Drucker migrieren ERWEITERUNG

Drucker & Ports als CSV exportierendrucker_migration.cmd
@echo off REM ============================================================ REM Erweiterung 11: Drucker-Migration (EXPORTIEREN) REM Ausfuehren als: Administrator auf dem QUELL-PC REM ============================================================ SET EXPORT_PFAD=C:\Temp\DruckerExport IF NOT EXIST "%EXPORT_PFAD%" mkdir "%EXPORT_PFAD%" echo Exportiere Drucker und Ports nach: %EXPORT_PFAD% echo. REM -- Drucker-Liste als CSV exportieren -- echo [1/2] Exportiere Druckerliste... powershell -Command "Get-Printer | Select-Object Name,DriverName,PortName,Shared,ShareName,Comment | Export-Csv -Path '%EXPORT_PFAD%\drucker_liste.csv' -NoTypeInformation -Encoding UTF8" REM -- Netzwerk-Ports als CSV exportieren -- echo [2/2] Exportiere Netzwerk-Ports... powershell -Command "Get-PrinterPort | Select-Object Name, PrinterHostAddress, PortNumber | Export-Csv -Path '%EXPORT_PFAD%\drucker_ports.csv' -NoTypeInformation -Encoding UTF8" echo. echo Fertig! Ordner auf den Ziel-PC kopieren und dort im Modus echo "Importieren" ausfuehren. HINWEIS: Treiber muessen dort installiert sein! pause
Beispiel-Ausgabe
Exportiere Drucker und Ports nach: C:\Temp\DruckerExport [1/2] Exportiere Druckerliste... [2/2] Exportiere Netzwerk-Ports... Fertig! Ordner auf den Ziel-PC kopieren und dort im Modus "Importieren" ausfuehren.
Export schreibt zwei CSV-Dateien (Drucker + Ports). Auf dem Ziel-PC liest die Import-Variante (im Generator wählbar) diese Dateien mit Import-Csv und legt Ports und Drucker neu an – kein Zusatz-Feature nötig.
⚠️ Wichtig: Die passenden Treiber müssen auf dem Ziel-PC bereits installiert sein, sonst schlägt der Import fehl.

12. Fehler-Logger ERWEITERUNG

Drucker dauerhaft protokollierendrucker_fehler_logger.cmd
@echo off REM ============================================================ REM Erweiterung 12: Drucker Fehler-Logger REM Beenden: CTRL+C | Als geplante Aufgabe: Trigger = Systemstart REM ============================================================ chcp 1252 > nul SET LOG_PFAD=C:\Temp\DruckerLog SET INTERVALL=60 IF NOT EXIST "%LOG_PFAD%" mkdir "%LOG_PFAD%" echo Fehler-Logger gestartet. Log-Verzeichnis: %LOG_PFAD% echo Beenden mit CTRL+C echo. :SCHLEIFE powershell -Command "$logFile = '%LOG_PFAD%\Drucker_' + (Get-Date -Format 'yyyyMMdd') + '.log'; Get-Printer | ForEach-Object { if ($_.PrinterStatus -ne 'Normal') { $msg = '[' + (Get-Date -Format 'HH:mm:ss') + '] WARNUNG: ' + $_.Name + ' - Status: ' + $_.PrinterStatus; Add-Content -Path $logFile -Value $msg -Encoding UTF8; Write-Host $msg } else { Write-Host ('[' + (Get-Date -Format 'HH:mm:ss') + '] OK: ' + $_.Name) } }" timeout /t %INTERVALL% /nobreak > nul goto SCHLEIFE
Beispiel-Ausgabe
Fehler-Logger gestartet. Log-Verzeichnis: C:\Temp\DruckerLog [08:15:03] OK: Mein_Netzwerkdrucker [08:15:03] OK: Microsoft Print to PDF [08:16:03] WARNUNG: Buero_Laser - Status: Offline
Die gesamte Prüflogik läuft in einer einzigen PowerShell-Zeile: nur wenn der Status nicht „Normal" ist, wird ein Eintrag mit Zeitstempel ins Tages-Log geschrieben. So bleibt das Protokoll übersichtlich.
🎯 Kombination: Am besten mit Skript 15 (schtasks) als geplante Aufgabe beim Systemstart einrichten.

C · Erweiterungen

13. Testseite drucken KEIN ADMIN

Schnell prüfen, ob der Drucker funktionierttestseite_drucken.cmd
@echo off REM ============================================================ REM Bonus: Windows-Testseite drucken REM ============================================================ SET DRUCKER_NAME=Mein_Netzwerkdrucker echo Sende Testseite an '%DRUCKER_NAME%'... rundll32 printui.dll,PrintUIEntry /k /n "%DRUCKER_NAME%" REM -- Optional: Eigenschaften-Fenster oeffnen -- REM rundll32 printui.dll,PrintUIEntry /e /n "%DRUCKER_NAME%" echo Testseite wurde gesendet. pause
rundll32 printui.dll,PrintUIEntry ist das eingebaute Windows-Werkzeug für Drucker. /k druckt eine Testseite, /e öffnet die Eigenschaften. Perfekt, um nach dem Einrichten (Skript 1) sofort zu testen.

14. Interaktives Menü LERNREICH

Mehrere Aufgaben in einem Skriptdrucker_menue.cmd
@echo off :MENU cls echo ======= Drucker-Werkzeugkasten ======= echo [1] Status aller Drucker anzeigen echo [2] Alle Warteschlangen leeren echo [3] Standarddrucker anzeigen echo [4] Beenden echo ====================================== choice /c 1234 /n /m "Bitte Auswahl treffen: " REM Wichtig: von der GROESSTEN Zahl nach unten pruefen! if errorlevel 4 goto ENDE if errorlevel 3 goto STANDARD if errorlevel 2 goto LEEREN if errorlevel 1 goto STATUS :STATUS powershell -Command "Get-Printer | Format-Table Name,PrinterStatus -AutoSize" pause & goto MENU :LEEREN powershell -Command "Get-Printer | ForEach-Object { Get-PrintJob -PrinterName $_.Name | Remove-PrintJob }" echo Alle Warteschlangen geleert. pause & goto MENU :STANDARD powershell -Command "Get-Printer | Where-Object Default | Select-Object Name" pause & goto MENU :ENDE echo Auf Wiedersehen!
Beispiel-Ausgabe
======= Drucker-Werkzeugkasten ======= [1] Status aller Drucker anzeigen [2] Alle Warteschlangen leeren [3] Standarddrucker anzeigen [4] Beenden ====================================== Bitte Auswahl treffen: 1
choice /c 1234 lässt genau eine der Tasten 1–4 zu und liefert die Nummer als ERRORLEVEL zurück. Lern-Kernpunkt: IF ERRORLEVEL n bedeutet „n oder grösser" – deshalb muss man von oben nach unten (4→1) abfragen, sonst greift immer die erste Bedingung.
🎓 Didaktik: Ein tolles Projekt – Schüler bauen die einzelnen Skripte aus Block B als Menüpunkte hier ein.

15. Automatisieren mit schtasks ADMIN

Ein Skript geplant ausführen lassenaufgabe_einrichten.cmd
@echo off REM ============================================================ REM Bonus: Geplante Aufgabe anlegen (taeglich 08:00 Uhr) REM Ausfuehren als: Administrator REM ============================================================ REM -- Aufgabe erstellen: /tn Name /tr Programm /sc Zeitplan -- schtasks /create /tn "Drucker-Logger" /tr "C:\Skripte\drucker_fehler_logger.cmd" /sc daily /st 08:00 /rl highest /f echo Geplante Aufgabe 'Drucker-Logger' wurde erstellt. REM -- Verwalten (bei Bedarf REM entfernen) -- REM schtasks /query /tn "Drucker-Logger" REM schtasks /delete /tn "Drucker-Logger" /f pause
Beispiel-Ausgabe
ERFOLG: Die geplante Aufgabe "Drucker-Logger" wurde erstellt. Geplante Aufgabe 'Drucker-Logger' wurde erstellt.
schtasks steuert den Windows-Aufgabenplaner per Befehl. /sc daily /st 08:00 = täglich um 8 Uhr, /rl highest = mit Adminrechten, /f = ohne Rückfrage überschreiben. So laufen Skripte automatisch – ganz ohne Klicken.

16. Spickzettel: CMD ↔ PowerShell

Die wichtigsten Drucker-Befehle nebeneinander
AufgabePowerShell-Cmdlet
Alle Drucker anzeigenGet-Printer
Drucker hinzufügenAdd-Printer
Drucker entfernenRemove-Printer
Port anlegenAdd-PrinterPort
Aufträge anzeigenGet-PrintJob
Aufträge löschenRemove-PrintJob
Treiber anzeigenGet-PrinterDriver
Einstellungen ändernSet-PrintConfiguration
Erreichbarkeit testenTest-Connection
Reine CMD/Batch-Befehle (net, ping, rundll32) sind uralt und immer da – gut für Steuerung, Schleifen und Dateien. Die PowerShell-Cmdlets oben sind modern und mächtig. Deshalb kombinieren die Skripte beides: Batch als Rahmen, PowerShell für die eigentliche Drucker-Arbeit.
💡 Ausprobieren: Öffne PowerShell und tippe nur Get-Printer – schon siehst du alle Drucker. Mit Get-Help Add-Printer -Examples gibt es Beispiele.

17. Fehlerbehandlung & Debugging

Als Administrator ausführen
Viele Skripte brauchen Adminrechte: Rechtsklick auf die .cmd-Datei → „Als Administrator ausführen". Fehlt das, erscheinen „Zugriff verweigert"-Meldungen.
Häufige Fehlerquellen
SymptomUrsache / Lösung
„Drucker nicht gefunden"Name muss exakt stimmen (Skript 3 nutzen, um den echten Namen zu sehen)
Umlaute (ä ö ü) unleserlichchcp 1252 setzen und mit -Encoding ASCII speichern
Treiber-Fehler beim AnlegenTreiber ist nicht installiert → zuerst installieren
PowerShell blockiertEinmalig Set-ExecutionPolicy RemoteSigned (als Admin)
Sicher testen
🎯 Trick: Zum Üben zuerst ein echo vor den „gefährlichen" Befehl setzen – dann wird der Befehl nur angezeigt, nicht ausgeführt:
echo powershell -Command "Remove-Printer ..."
Erst wenn alles stimmt, das echo entfernen. So kann nichts kaputtgehen.
🐞 Debugging: Fehlt am Ende ein pause, schliesst sich das Fenster sofort und man sieht die Meldung nicht. Zum Fehlersuchen ein pause einbauen oder das Skript aus einer offenen Eingabeaufforderung starten.