У меня на win7 x64 не работает. Ну и ладно.
Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in File "", line 158, in main
File "", line 108, in getAllDrivers
__main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюуЁрььр PnP ╠рщъЁюёюЇЄ
Похоже скрипт ожидает английскую версию винды. Починил, выполнив перед запуском скрипта:

chcp 65001


Теперь падает с такой ошибкой :-(
Reading all OEM drivers... done
Reading oem*.inf files...
Traceback (most recent call last):
  File "<string>", line 248, in <module>
  File "<string>", line 198, in main
Exception: oem50.inf is duplicate of oem49.inf
Спасибо. Не заработала пока страницу не поменял. Почистила целых 153 из 1237 Мб =)
Да, писалось на английской. Надо будет поправить, может быть, даже с помощью этой chcp, спасибо :)
А то, что у Вас случилось… это нечто странное. В %WINDIR%\Inf нашлось два одинаковых по содержимому .INF файла. Можно попробовать подумать, как с этим жить.
насколько заметил: при установке драйверов в режиме «выберу сам из указанного места», виндовс просто копирует еще один комплект. сами драйвера, видимо пишутся поверх, а вот inf — пишется как oem?? со счетчиком.
Думаю, если нашлись совершенно одинаковые inf, все у которых меньшее значение, можно просто удалить.
Тут такая же фигня сулчилась. Два одинаковых файла. Что предпринять? Как починить?
Я пока не знаю. Желательно найти, каким драйверам они соответствуют, есть ли физические дубли в виде папок и всё такое.
Я пока вижу два варианта действий:
  1. Если дублированы только .inf файлы, а драйвера реально хранятся в единственном экземпляре — игнорировать (удалять эти .inf-ы я бы в любом случае не стал)
  2. Если дублированы и сами драйвера в DriverStorage — удалять с наименьшим номером

Попробуйте посмотреть в выводе pnputil -e, что за драйвера указаны на эти oem???.inf файлики, может, это нам что подскажет. Ещё (если не лень) поищите совпадающие по содержанию .inf'ы в подпапках %WINDIR%\System32\DriverStore\FileRepository, это поможет ответить на вопрос, дублируются ли драйвера в хранилище.
Кстати, починено, см. релиз 1.0.1
У меня win 8.1 Preview x64 — не работает
Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in File "", line 158, in main
File "", line 108, in getAllDrivers
__main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюуЁрььр PnP ╠рщъЁюёюЇЄ
Уже отвечали выше, видимо, у Вас русский Windows, попробуйте по рецепту выше.
win7 x64 — работает, -1,6 Gb
На семерке больше всего места жрет бессовестно жиреющая папка winsxs, а от старых драйверов места будет с гулькин нос.
Воо, за то чтоб ее почистить или хотя бы почитать зачем нужно это нагромождение DLLек и как оно все работает, я готов многое отдать
И ещё ссылка по теме:
www.outsidethebox.ms/15302/
О, круто! Освободил 4 ГБ только с помощью «Очистки диска» с очисткой системных файлов.
Это да, эта папка толстая. Но, судя по беглому взгляду внутрь, там всё так или иначе нужно установленным программам, что, кстати, подтверждают комментарии ниже.
Мне пишет

Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in
File "", line 158, in main
File "", line 108, in getAllDrivers
__main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюу
Ёрььр PnP ╠рщъЁюёюЇЄ

Win7-x64
битность соблюл.
Оба ноутбука с тех пор живут полной жизнью, в смысле никаких проблем от очистки я не заметил.

есть такой скрипт — WinsxsLite, чистит папку winsxs.
сам он работает нормально, но после использования замечены проблемы при установке SP, и [скорее всего] обычных обновлений через WU или вручную через .exe/.msu
здесь с этим точно все в порядке?

тоже люблю удалять ненужное/лишнее, например очень бесит куча mui-файлов в папках с языками.
Было забавно, когда я запустил WinsxsLite на ноуте и после очистки у меня перестали 32-х битные приложения работать с инетом. Т.е. ie 64 единственный, который работал, а весь остальной софт сидел в глубоком оффлайне. До сих пор не пойму как так произошло, особенно с учетом, что на рабочем компе все прошло без каких либо проблем.

Кстати, прилично места можно освободить, если поудалять кучу шрифтов (арабские, корейские, ну и просто ненужные)
Ну что значит «точно»? На моих пациентах проблем не обнаружено, удаляю я довольно безопасно, через вызов MS программы. Но гарантий я Вам не давал :)
Кстати спасибо, +6гб. места

Win7 64-бит Ultimate, английская.
Да, кстати, в том же pyWinClobber у меня есть и скрипты для очистки .msi/.msp кэша винды, удаляют файлы, которые не зарегистрированы в Windows Installer Database. Правда, сюда про них писать не стал, уж больно выхлоп маленький от них был на моём ноутбуке — всего один несчастный беспризорный .msi нашёлся, на 16 Мб. Видимо, Винда стала более аккуратно отслеживать эти файлы, и они перестали плодиться.
как и в предыдущих 3-х комментариях, ошибка в строке 108 файла driver_cleanup.py, из-за того что проверяется на соответствие строка названия программы
у меня, как и у предыдущих комментаторов, русифицированная винда, следовательно мне pnputil выдает 'Служебная программа PnP Майкрософт', а в программе проверяется 'Microsoft PnP Utility'
Старые драйверы можно почистить хитроватым способом, но без специальных программ через диспетчер оборудования (Device Manager — View — Show hidden devices). Наверное, они как раз в /DiverStore хранятся. Если нет — это ещё один пункт в бюджете очистки. На WinXP — такая же система.
Что-то я не вижу там старых драйверов нвидии, например.
так удаляет только записи старых устройств в реестре, но никак не файлы драйверов
самые интересные — скрытые, но не подключенные устройства (которые по умолчанию не показывает диспетчер устройств) можно увидеть так:
1 устанавливаем переменную окружения devmgr_show_nonpresent_devices в значение 1 (на самом деле можно присвоить что угодно, только не 0)
1.1 через командную строку:
cmd.exe
set devmgr_show_nonpresent_devices=1
devmgmt.msc

1.2 через гую: свойства системы->дополнительные параметры->дополнительно переменные среды. Далее, любимым образом запускаем диспетчер устройств
2. в диспетчере устройств выбираем вид->показать скрытые устройства
3. неподключенные устройства показываются серым цветом.
4. заходим в устройство, вкладка драйвер->удалить. ставим галочку Удалить программы драйверов для этого устройства.
вот так можно удалить драйвера от ранее подключенных в систему устройств (модемы, сетевые карты и пр)
Win8 x64

Reading all OEM drivers… done
Reading oem*.inf files… done
Parsing DriverStore…
Traceback (most recent call last):
File "", line 248, in File "", line 215, in main
IOError: [Errno 2] No such file or directory: 'C:\\Windows\\system32\\DriverStor
e\\FileRepository\\mdmcpq.inf_amd64_d9e0b9c4fe044b4d\\mdmcpq.inf'
Ого… другая структура на восьмёрке, что ли?.. Можете прислать содержимое папки
C:\Windows\system32\DriverStoe\FileRepository\mdmcpq.inf_amd64_d9e0b9c4fe044b4d\
?
Там только один файл «usbser.sys»
db.tt/ieHRsqtp
Похоже на недокопированный драйвер… по крайней мере у меня такого не бывает.
Видимо, такие драйвера надо просто игнорировать.
Точно такая же ошибка.

Win10 Rus x64

Reading all OEM drivers… done
Reading oem*.inf files… done
Parsing DriverStore…
Traceback (most recent call last):
File "", line 287, in File "", line 254, in main
IOError: [Errno 2] No such file or directory: 'C:\\Windows\\system32\\DriverStore\\FileRepository\\wdmaudio.inf_amd64_5641cde732058628\\wdmaudio.inf'

Как «проигнорировать такой драйвер»?
У вас большая папка DriverStore? Попробуйте, пожалуйста, применить стандартный инструмент очистки и посмотреть, что изменилось.
Нет, не назвал бы большой: 987 МБ.
А стандартном инструменте очистки почему то отсутствует пункт «Пакеты драйверов устройств»
Там кнопка слева внизу «Очистить системные файлы».
Win7 x64 Pro Eng
Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in File "", line 158, in main
File "", line 118, in getAllDrivers
File "", line 77, in parseLine
ValueError: too many values to unpack
Совсем забавно… можете сбросить мне в личку вывод «pnputil -e»?
Я кстати правильно понимаю, что удалять драйвера для устройств «которые на данный момент не используются» не идеальный подход? Ведь таким образом снесутся так же драйвера всего, что не воткнуто сейчас, но подключается время от времени (сканеры, принтеры, геймпады, тв-тюнеры и прочее).
Правильно понимаете. Но мой скрипт не удаляет драйвер только потому, что тот не используется.
Он пытается найти и удалить старые версии драйвера, оставляя самую последнюю нетронутой.
Спасибо, был невнимателен.
Разве Windows сама не скачивает нужные ей драйвера в момент подключения устройства?
Я за то, чтобы не хранить локально миллион ненужных драйверов, большинство из которых даже никогда не пригодятся, а добавить опцию в программу очистки удалять все неиспользуемые в данный момент драйвера.
Увы, на используемое мною железо (китайские фиговины, телефоны Huawei/Highscreen и т.п.) не находит драйверов, надо тянуться за дисками или искать самому. Нет, совет «не используйте такие железяки» мне не подходит.
Значит предложить список при очистке, и автоматически очищать именно те драйвера, которые есть на серверах MS, не трогая установленные вручную.
Интересно, каким образом отличать автоматически установленные от установленных вручную? Я способа не знаю, по крайней мере на данный момент.
Можно, правда, добавить опцию типа «попробуй удалить всё подряд», тогда останутся только драйвера от того, что сейчас в систему воткнуто.
Обычно автоматически установленные драйвера имеют подпись от имени Microsoft.
Подпись от MS — это, как я понимаю, знак того, что драйвера прошли сертификацию, проверку или ещё что-то. Где они при этом физически хранятся — я не знаю. Например, драйвера NVidia у меня сертифицированы и подписаны MS, но ставил я их путём скачивания пакета драйверов с сайта (возможно, Windows и сама догадалась бы при установке сходить на сайт, я обновлял).
Драйвера, вручную устанавливаемые с сайта nVidia, всегда содержат Copyright © nVidia, упоминания Microsoft там никогда не видел.

Кстати, у меня Windows 8, и в Disk Cleanup нет ни одной строчки, содержащей слово driver, как на скриншоте.
Еще была утилита, кторая ищет дубли библиотек, тоже огромное количество места высвобождать могла.
Microsoft Windows [Version 6.1.7601]
Copyright © 2009 Microsoft Corporation. All rights reserved.

C:\Users\Alex\Downloads\64-bit\64-bit>driver_cleanup.exe
Reading all OEM drivers… done
Reading oem*.inf files…
Traceback (most recent call last):
File "", line 248, in File "", line 198, in main
Exception: oem171.inf is duplicate of oem170.inf

C:\Users\Alex\Downloads\64-bit\64-bit>

Вот это разве не то же самое?

виноват, тут был левый комментарий :(
Говорит. Тем не менее, хотелось бы точно знать, что эта штука делает именно то, что описано в статье.
Ещё раз — виноват :(
Убеждался у себя на двух экземплярах Win7, что не слепой и не мог пропустить такой пункт, а не заметил, что речь шла про Win8.
Простите :)
Не знал, что такой пункт добавили. Здорово, я рад за пользователей Win8 :)
Пункт добавили а тольку нет. Есть куча старых драйверов нвидии и других устройств от 13 года, встроеная утилита показывает к очистке 0 байт
К слову о повышении привилегий окна командной строки. Утилита за авторством Сергея Ткаченко.
Или то же самое, но без .NET :)
Тогда, вдогонку, там еще в комментах есть намёк на NirCMD, через который тоже можно такое сделать.
Да понятно, везде же в конечном итоге идёт вызов WinAPI. Просто в моём случае я сделал обёртку для него на Python, вдруг кому пригодится…
Больше инструментов, хороших и разных! ;)
"Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in File "", line 158, in main
File "", line 108, in getAllDrivers
__main__.PnpUtilOutputError: Unexpected pnputil.exe output start: ╤ыєцхсэр  яЁюу
Ёрььр PnP ╠рщъЁюёюЇЄ"
Руки таким программистам выдёргивать нужно.
Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in File "", line 158, in main
File "", line 118, in getAllDrivers
File "", line 78, in parseLine
File «C:\Vass\Dev\pyWinClobber\build\pyi.win32\pyWinClobber\out01-PYZ.pyz\_str
ptime», line 325, in _strptime
ValueError: time data '29/05/2008' does not match format '%m/%d/%Y'

chcp 65001 писал
такого пути у меня нет: C:\Vass\Dev
Понятно. Опять локализация меня кусает, на сей раз в формате даты… Блин %)
Fixed, кстати. :)
C:\Users\GDie\Downloads\64-bit (1)>driver_cleanup.exe
Reading all OEM drivers…
Traceback (most recent call last):
File "", line 287, in File "", line 197, in main
File "", line 157, in getAllDrivers
__main__.PnpUtilOutputError: Cannot find suitable date format

joxi.ru/hsVTUtg5CbC-TtD0DDg
Во блин, я же вроде это чинил и проверял… а скиньте в личку вывод «pnptuil -e», пожалуйста?
В win есть один очень жрущий файл «hiberfil.sys» (у меня на 13,4Гб).
Если не нужна гибернация и сверхбыстрая загрузка, то можно «удалить» этот файл командой:
powercfg  -h off 

Скрытый текст

Обычно тех, кому нужно столько оперативки, какие-то 14 лишних гигабайт не заботит. :)
ссд же дорогие, вот у меня на 120гб. Сейчас не заботит, раньше, когда был на 60 — этот файл стал для меня откровением.
У кого русифицированная Windows — скиньте в личку вывод «pnputil -e», чтобы понять, от чего отталкиваться при разборе вывода.
Спасибо, скинули, можно больше пока не скидывать. :)
Постарался починить основные проблемы, связанные с локализацией, пробуем новый релиз: github.com/JustAMan/pyWinClobber/releases/tag/v1.0.1
Спасибо, теперь работает. Освободил 1,5 Gb.
Прошу прощения но вот моя ошибка:

D:\TMP\64-bit>driver_cleanup.exe
Reading all OEM drivers…
Traceback (most recent call last):
File "<string>", line 287, in <module>
File "<string>", line 197, in main
File "<string>", line 131, in getALLDrivers
 __main__.PnpUtilOutputError: Unexpected pnputil.exe output start:

После «output start:» никаких кракозябров нет.
Версию качал v1.0.1 для х64
chcp 65001
пробовал
chcp уже неактуально.

Аналогично — сбросьте мне в личку вывод «pnputil -e» (выполняется в cmd.exe, запущенном с правами администратора)
«Очистка диска» в Windows 7 научилась удалять старые обновления и удалять лишние файлы из WinSxS:
www.outsidethebox.ms/15444/
Глядишь, и очистку драйверов портируют… и можно будет выкинуть мои скрипты :)
Вряд ли из-за возможных проблем — некоторые приложения загружают драйверы только при активации определённых функций, так что скрипт их удалить и функционал перестанет работать.
У меня вот такое выдаёт (Win7 x64 SP1 Professional)

C:\temp\pyWinClobber64bit>driver_cleanup.exe
Reading all OEM drivers…
Traceback (most recent call last):
File "", line 248, in File "", line 158, in main
File "", line 118, in getAllDrivers
File "", line 77, in parseLine
ValueError: too many values to unpack

pastebin.com/Rj6S2Qev
Спасибо!!!
Win 8 rus 64bit: -2384 Mb
Спасибо! Win 8.1 RU x64: -7848 Mb
Привет вам из будущего. Диски у нас по прежнему дорогие, windows 10 всё так же не умеет удалять старые версии драйверов. Спасибо за утилиту, на одной только nvidia освободил 15гб, и ещё чуть больше 1гб на всём остальном.
Только полноправные пользователи могут оставлять комментарии.
Войдите, пожалуйста.