Skip to content

Instantly share code, notes, and snippets.

@Techlogist
Created January 25, 2021 23:16
Show Gist options
  • Save Techlogist/09ed2b6efa3110c6f3248ab5868bfb6a to your computer and use it in GitHub Desktop.
Save Techlogist/09ed2b6efa3110c6f3248ab5868bfb6a to your computer and use it in GitHub Desktop.
Fixing issues with Type-4 printer drivers
@echo off
title Remove Drivers
mode con:cols=70 lines=15
REM Make sure the print spooler is running
:run_spooler
for /f "tokens=4" %%i in ('sc query spooler ^| find /i "STATE"') do (
if "%%i" EQU "RUNNING" (cls && timeout /T 5 /NOBREAK>null && goto confirmed_spooler) else ^
if "%%i" EQU "STOPPED" (cls && sc start spooler && timeout /T 10 /NOBREAK>null && goto run_spooler) else ^
if "%%i" NEQ "RUNNING" (cls && sc start spooler && timeout /T 5 /NOBREAK>null && goto run_spooler)
)
:confirmed_spooler
REM Map all useless printer drivers
set _driver_name=driver_%random%
wmic /output:"%temp%\%_driver_name%.csv" printer get drivername /format:csv
type "%temp%\%_driver_name%.csv" > "%temp%\file_%_driver_name%.txt"
for /f "tokens=2 skip=2 delims=," %%g in (%temp%\file_%_driver_name%.txt) do (
if "%%g" equ "DriverName" (echo >nul) else ^
if "%%g" equ "Driver name to Stay" (echo >nul) else ^
if "%%g" equ "Driver name to Stay" (echo >nul) else ^
echo %%g>>"%temp%\file_%_driver_name%_cl.txt"
)
REM Delete the printer drivers
for /f "delims=;" %%q in (%temp%\file_%_driver_name%_cl.txt) do (rundll32 printui.dll,PrintUIEntry /dd /m "%%q" /q)
REM To delete the drivers we need to restart the print spooler
net stop spooler
net start spooler
REM Continue when print spooler is running
:check_spooler
for /f "tokens=4" %%i in ('sc query spooler ^| find /i "STATE"') do (
if "%%i" EQU "RUNNING" (cls && goto after_spooler) else ^
if "%%i" NEQ "RUNNING" (cls && timeout /T 5 /NOBREAK>null && goto check_spooler)
)
:after_spooler
REM Delete all the temporary files for Printer
del "%temp%\%_driver_name%.csv"
del "%temp%\file_%_driver_name%.txt"
del "%temp%\file_%_driver_name%_cl.txt"
@echo off
REM Make sure the print spooler is running
:run_spooler
for /f "tokens=4" %%i in ('sc query spooler ^| find /i "STATE"') do (
if "%%i" EQU "RUNNING" (cls && goto confirmed_spooler) else ^
if "%%i" EQU "STOPPED" (cls && sc start spooler && timeout /T 5 /NOBREAK>null && goto run_spooler) else ^
if "%%i" NEQ "RUNNING" (cls && sc start spooler && timeout /T 5 /NOBREAK>null && goto run_spooler)
)
:confirmed_spooler
REM Map all useless printer drivers
set _driver_name=driver_%random%
wmic /output:"%temp%\%_driver_name%.csv" printer get drivername /format:csv
type "%temp%\%_driver_name%.csv" > "%temp%\file_%_driver_name%.txt"
for /f "tokens=2 skip=2 delims=," %%g in (%temp%\file_%_driver_name%.txt) do (
if "%%g" equ "DriverName" (echo >nul) else ^
if "%%g" equ "Driver name to Stay" (echo >nul) else ^
if "%%g" equ "Driver name to Stay" (echo >nul) else ^
echo %%g>>"%temp%\file_%_driver_name%_cl.txt"
)
REM Map all useless printers
set _printer_name=printer_%random%
wmic /output:"%temp%\%_printer_name%.csv" printer get name /format:csv
type "%temp%\%_printer_name%.csv" > "%temp%\file_%_printer_name%.txt"
for /f "tokens=2 skip=2 delims=," %%g in (%temp%\file_%_printer_name%.txt) do (
if "%%g" equ "Name" (echo >nul) else ^
if "%%g" equ "Printer name to Stay" (echo >nul) else ^
if "%%g" equ "Printer name to Stay" (echo >nul) else ^
echo %%g>>"%temp%\file_%_printer_name%_cl.txt"
)
REM Delete the printers
for /f "delims=;" %%p in (%temp%\file_%_printer_name%_cl.txt) do (rundll32 printui.dll,PrintUIEntry /dl /n "%%p")
REM To delete the drivers we need to restart the print spooler
net stop spooler
net start spooler
REM Continue when print spooler is running
:check_spooler
for /f "tokens=4" %%i in ('sc query spooler ^| find /i "STATE"') do (
if "%%i" EQU "RUNNING" (cls && goto after_spooler) else ^
if "%%i" NEQ "RUNNING" (cls && timeout /T 5 /NOBREAK>null && goto check_spooler)
)
:after_spooler
REM Delete the printer drivers
for /f "delims=;" %%q in (%temp%\file_%_driver_name%_cl.txt) do (rundll32 printui.dll,PrintUIEntry /dd /m "%%q")
REM Delete all the temporary files for Printer
del "%temp%\%_driver_name%.csv"
del "%temp%\file_%_driver_name%.txt"
del "%temp%\file_%_driver_name%_cl.txt"
REM Delete all the temporary files for Printer
del "%temp%\%_printer_name%.csv"
del "%temp%\file_%_printer_name%.txt"
del "%temp%\file_%_printer_name%_cl.txt"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment