CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Аватара пользователя
BaerLinn

CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение BaerLinn »

Хелп! Нужен батник, который бы удалял параметр реестра, содержащий определенную информацию.

Пример, ключ реестра [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs], где сохраняется информация о введенных URL'ах. Не известно, какое имя будет иметь параметр, содержащий значение, скажем,
http://udaff.com/
. И нужно удалить этот параметр. Как? Хелп!
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Iska »

Попробуйте наподобие такого:



Код:

Код: Выделить всё

@echo off
set sKey=HKCU\Software\Microsoft\Internet Explorer\TypedURLs
for /f "delims=	 " %%i in ('reg.exe query "%sKey%" ^| find /i "www.microsoft.com"') do (reg.exe delete "%sKey%" /v "%%i" /f >nul)

Будут убраны все упоминания о «
www.microsoft.com
».



Вопрос лишь в том, будут ли работать параметры, лежащие ниже удаляемых? Допустим, мы нашли и удаляем параметр «url15», останутся ли после удаления рабочими значения из «url16», «url17», «url18» и т.д.? Не проверял.
Аватара пользователя
NiOl

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение NiOl »

начал извращаться с подпараметрами и не успел в первонахи но раз уж добил - выкладываю



вызов такой - батник, после него какую подстроку искать, потом на что заменять и если замена нужна не всей строки из хистори, а только той части, что ищется, то добавляем "плюс":



Url.bat udaff.com ya.ru


заменит строку
http://udaff.com/
на ya.ru



а Url.bat udaff.com ya.ru +

заменит строку
http://udaff.com/
на
http://ya.ru/








Код:

Код: Выделить всё

@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
set SearchStr=%1
set ReplaceStr=%2
if "%1"=="" (
msg %username% "Use: %0   [+]   where `+`  =  `smart Replace`"
exit 1
)
rem Рекурсивный вызов "Reg" иногда глючит - разносим Query и Add
Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs" | Find /I "%SearchStr%" >%~dpn0.tmp
for /f "usebackq tokens=1,2,3" %%K in ("%~dpn0.tmp") do (
if "%3"=="+" (
set Data=%%M
set Data=!Data:%SearchStr%=%ReplaceStr%!
) else (
set Data=%ReplaceStr%
)
Reg Add "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs" /v "%%K" /t "%%L" /d "!Data!" /f
)
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Iska »

Из письма в ПМ:


Цитата Ruslan-kam:



Использовал ваш сценарий из
CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные


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





Вопросы следует помещать именно на форум, ибо тут, помимо Iska, всегда найдётся более чем достаточное число людей, желающих и могущих помочь. А для правильного ответа потребуется следующее:



Приведите здесь Ваш, пусть и неработающий, код пакетного файла — тогда можно будет говорить предметно.
Аватара пользователя
Ruslan-kam

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Ruslan-kam »

И так есть путь в реестре в нём ключи со строковыми параметрами если ключ имеет вид "XXX", то батник работает как надо, если же ключ носит имя с пробелом "XXX XXX", то командная строка возвращает ошибку что такое значение не найдено. Нужно именно таким способом удалить несколько ключей к примеру "Mobile Partner"



Код:

Код: Выделить всё

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] 
"Mobile Partner"="C:\Program Files\MegaFon Internet\MegaFon Internet.exe"

Вот пример батника

Код:

Код: Выделить всё

set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
for /f "delims=	 " %%i in ('reg.exe query "%sKey%" ^| find /i "MegaFon"') do (reg.exe delete "%sKey%" /v "%%i" /f >nul)
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Iska »

Если Вам известно имя параметра раздела реестра — нет никакой нужды делать опрос и разбор, достаточно простого:



Код:

Код: Выделить всё

reg.exe delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "Mobile Partner" /f
Аватара пользователя
Ruslan-kam

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Ruslan-kam »

Я не знаю какое имя будет у ключей. Я знаю только часть пути куда они ведут. В этом и загвоздка.



Поэкспериментировав установил что если в устанавливаемом командой set ключе убрать самый последний слэш, то батник начинает работать на половину. А именно:

Запускаем такой батник



Код:

Код: Выделить всё

set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
for /f "delims=	 " %%i in ('reg.exe query "%sKey%" ^| find /i "MegaFon"') do (reg.exe delete "%sKey%" /v "%%i" /f >nul)

То получаем такую ошибку



Код:

Код: Выделить всё

C:\>set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
C:\>for /F "delims=      " %i in ('reg.exe query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" | find /i "MegaFon"') do (reg.exe delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v %i /f  1>nul )
C:\>(reg.exe delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v Mobile /f  1>nul )
Ошибка: Не удается найти указанный раздел или параметр в реестре.
C:\>pause  Для продолжения нажмите любую клавишу . . .

Получается он находит ключь правильно, но передаёт на удаление часть ключа до пробела. Поэтому не срабатывает
Аватара пользователя
Ruslan-kam

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Ruslan-kam »

УРААААААА! Сам победил.

Надо добавить команду Tokens она определяет сколько строк передавать в тело для выполнения цикла. Звёздочка автоматически присваивает строке переменную которую уже можно использовать в теле. Команду delims= пропустил потому что она и у меня и по умолчанию имеет в параметре табуляцию и пробел. Так что мне она не нужна.



Код:

Код: Выделить всё

set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
for /f "Tokens=1-2*" %%i in ('reg.exe query "%sKey%" ^| find /i "Megafon"') do (reg.exe delete "%sKey% " /v "%%i %%j" /f >nul)
Аватара пользователя
SendMessage

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение SendMessage »

Цитата Ruslan-kam:



УРААААААА! Сам победил.
CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные




Все это, конечно, хорошо, но что ты будешь делать, если другой параметр будет не из двух слов, а из одного? Или из трех?

Ведь, как ты сам говоришь, не один параметр может подпадать под поиск. А один параметр и напрямую удалить можно. Iska об этом и сказал.
Аватара пользователя
Ruslan-kam

Re: CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Сообщение Ruslan-kam »

SendMessage,

Вот так!



Код:

Код: Выделить всё

@echo off
REM удаляем ключ без пробелов в имени
set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
for /f "" %%i in ('reg.exe query "%sKey%" ^| find /i "Megafon"') do (reg.exe delete "%sKey% " /v "%%i" /f >nul)
REM удаляем ключ с двумя словами в имени
set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
for /f "Tokens=1-2*" %%i in ('reg.exe query "%sKey%" ^| find /i "Megafon"') do (reg.exe delete "%sKey% " /v "%%i %%j" /f >nul)
REM удаляем ключ с тремя словами в имени
set sKey=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
for /f "Tokens=1-3*" %%i in ('reg.exe query "%sKey%" ^| find /i "Megafon"') do (reg.exe delete "%sKey% " /v "%%i %%j %%k" /f >nul)
REM ну и так далее скольку нужно столько и выполняем.

Всё это безобразие засовываем в один батник.



Может коряво и не профессионально, но зато работает.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»