Попробую опубликовать серию простейших скриптов (батников) иногда помогающих выполнить некоторые, вроде бы и простые, но порой требующие времени на подготовку задачи.
Нижеприведенный батник использовался, как часть другого скрипта, для удаленной деинсталляции приложений в локальной сети.
Тестировался на Win XP Prof SP3 ru. Для x64 систем, возможно, есть необходимость его изменить.
Скачать можно архивом здесь: find uninst string in registry.7z
@echo off cls :: участник форума oszone - otsheln1k 23.05.2011 :: строка необходима для исключения ошибки возникающей на именах :: разделов прописанных кириллицей например "Архивариус 3000_is1" в Win кодировке :: выбор для поиска строки кириллицей НЕВОЗМОЖЕН chcp 1251 >nul :: от использования setlocal enabledelayedexpansion пришлось отказаться :: из-за встречающихся "!" в именах разделов, парсинг их прерывался с ошибкой :: например "NeroBackItUp!UninstallKey" :: Можно сразу прописать имя программы, прописывать надо точно так, как она :: прописана в ключе реестра DisplayName. :: :: если имя в set prog= не определено, будет выполнен подбор :: имен в соответствии с введенной пользователем строкой :: имя раздела деинсталляции совпадает на всех станциях, достаточно выполнить :: поиск имени раздела и строки для локальной машины :begin echo. set "key=hklm\software\microsoft\windows\currentversion\uninstall" set prog= rem set "prog=Gpu-z" rem set "prog=adobe" if not "%prog%" == "" goto :next echo. echo. set /p "prog=Введите имя программы для деинсталляции: " echo. FOR /F "usebackq tokens=3 delims= " %%i IN (`reg query "%key%" /s ^| findstr /i /c:"%prog%" ^| findstr /i "displayname"`) do ( set "uninstprog=%%i" & call:look ) if "%uninstprog%" == "" ( echo Ничего не найдено, повторите поиск goto :begin ) else ( echo. ) echo. echo Если найдено более 1-й строки - уточните запрос повторным вводом. echo (если продолжить, для деинсталляции будет выбрана последняя строка) echo. echo. echo 0 - выйти 1 - повторить ввод имени 3 - продолжить (Enter) echo. set /p "case=Ваш выбор? " if "%case%" == "0" exit if "%case%" == "1" goto :begin if "%case%" LEQ 3 goto :next2 :next set "uninstprog=%prog%" :next2 echo. echo Идет поиск в реестре echo строки деинсталяции для: %uninstprog% echo. FOR /F "usebackq tokens=7 delims=\" %%i IN (`REG QUERY "%key%"`) do ^ FOR /F "usebackq tokens=1,2*" %%l IN (`REG QUERY "%key%\%%i"`) do ^ if "%%l"=="DisplayName" if "%%n" == "%uninstprog%" set "keyi=%%i" :: строка нужна при неточном предопределении имени деинстал. приложения if "%keyi%" == "" (echo key not found & echo. & pause & exit) else (echo keyi = %keyi%) echo. reg query "%key%\%keyi%" /s | findstr /i "uninstallstring" echo. echo Скрипт закончил свою работу pause>nul exit :look echo Найдено имя: %uninstprog%
2 комментария:
Огромное вам человеческое спасибо за скрипт!!!То что доктор прописал...
Пользуйтесь на здоровье :)
Отправить комментарий