Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

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

Новый участник


Сообщения: 18
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:54, 16-11-2009

 

Ветеран


Contributor


Сообщения: 27627
Благодарности: 8084

Профиль | Отправить PM | Цитировать


Попробуйте наподобие такого:
Код: Выделить весь код
@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» и т.д.? Не проверял.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:09, 16-11-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


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

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

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 <Search URL SubString> <Replace Data> [+]   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
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:26, 16-11-2009 | #3


Ветеран


Contributor


Сообщения: 27627
Благодарности: 8084

Профиль | Отправить PM | Цитировать


Из письма в ПМ:
Цитата Ruslan-kam:
Использовал ваш сценарий из http://forum.oszone.net/post-1271806-2.html
Изменил путь по которому ищется текст, но почему то не находит текст в ключах в которых есть пробелы. Помогите исправить.
Вопросы следует помещать именно на форум, ибо тут, помимо Iska, всегда найдётся более чем достаточное число людей, желающих и могущих помочь. А для правильного ответа потребуется следующее:

Приведите здесь Ваш, пусть и неработающий, код пакетного файла — тогда можно будет говорить предметно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:58, 08-02-2011 | #4


Пользователь


Сообщения: 61
Благодарности: 11

Профиль | Отправить PM | Цитировать


И так есть путь в реестре в нём ключи со строковыми параметрами если ключ имеет вид "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)

Последний раз редактировалось Ruslan-kam, 08-02-2011 в 06:51.


Отправлено: 03:36, 08-02-2011 | #5


Ветеран


Contributor


Сообщения: 27627
Благодарности: 8084

Профиль | Отправить PM | Цитировать


Если Вам известно имя параметра раздела реестра — нет никакой нужды делать опрос и разбор, достаточно простого:
Код: Выделить весь код
reg.exe delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "Mobile Partner" /f
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:43, 08-02-2011 | #6


Пользователь


Сообщения: 61
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Поэкспериментировав установил что если в устанавливаемом командой 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, 08-02-2011 в 21:01.


Отправлено: 20:40, 08-02-2011 | #7


Пользователь


Сообщения: 61
Благодарности: 11

Профиль | Отправить PM | Цитировать


УРААААААА! Сам победил.
Надо добавить команду 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)

Отправлено: 23:06, 08-02-2011 | #8


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Цитата Ruslan-kam:
УРААААААА! Сам победил. »
Все это, конечно, хорошо, но что ты будешь делать, если другой параметр будет не из двух слов, а из одного? Или из трех?
Ведь, как ты сам говоришь, не один параметр может подпадать под поиск. А один параметр и напрямую удалить можно. Iska об этом и сказал.

Отправлено: 05:59, 09-02-2011 | #9


Пользователь


Сообщения: 61
Благодарности: 11

Профиль | Отправить PM | Цитировать


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 ну и так далее скольку нужно столько и выполняем.
Всё это безобразие засовываем в один батник.

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

Отправлено: 06:31, 09-02-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить параметр реестра, содержащий определенные данные

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как из архивного образа системы извлечь нужные данные реестра? ZurabK Microsoft Windows Vista 5 10-09-2020 12:08
Разное - параметр реестра LMCompatibilityLevel zeroua Microsoft Windows 2000/XP 3 01-08-2009 09:12
HDD - [решено] HDD - удалить данные без возможности восстановления karman13 Накопители (SSD, HDD, USB Flash) 24 08-04-2009 15:40
VBS/WSH/JS - необходимо менять разрешения на раздел реестра содержащий спецсимволы thebas Скриптовые языки администрирования Windows 2 30-03-2009 15:19
VBS/WSH/JS - [решено] Как добавить "сложное" значение в "бинарный" параметр реестра с помощью WSH 13Demon Скриптовые языки администрирования Windows 1 10-02-2009 09:47




 
Переход