вторник, 24 мая 2011 г.

Строки деинсталляции из реестра


Попробую опубликовать серию простейших скриптов (батников) иногда помогающих выполнить некоторые, вроде бы и простые, но порой требующие времени на подготовку задачи.

Нижеприведенный батник использовался, как часть другого скрипта, для удаленной деинсталляции приложений в локальной сети.

Тестировался на 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 комментария:

Анонимный комментирует...

Огромное вам человеческое спасибо за скрипт!!!То что доктор прописал...

Yuriy комментирует...

Пользуйтесь на здоровье :)

Отправить комментарий