1779 / 761 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
1

Удалить содержимое раздела реестра

03.07.2011, 00:09. Показов 59372. Ответов 121
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо очистить содержимое разделов реестра startupreg, startupfolder включая подразделы и параметры. Решил это радикально
Windows Batch file
1
2
3
4
5
@echo off
Reg delete "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg" /f
Reg delete "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder" /f
Reg add "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg" /f
Reg add "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder" /f
однако предполагаю, что возможно выполнить очистку содержимого основных разделов (startupreg, startupfolder) без их удаления. Есть варианты?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2011, 00:09
Ответы с готовыми решениями:

Как проверить наличие раздела реестра?
Как? :)

Получить список всех значений раздела реестра
1.Получить список всех значений раздела реестра: Раздел...

Нет требуемого раздела реестра
Требуется зайти в раздел реестра HKEY_LOCAL_MACHINEHKEY_LOCAL_MACHINESOFTWARE Microsoft Windows NT...

Как добавить запись в раздел реестра, если полное имя раздела содержит пробелы?
Всем привет пытаюсь добавить ключ Windows Registry Editor Version 5.00 ...

121
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
03.07.2011, 01:14 2
Ваш метод проще, но лучше конечно без удаления самой ветки.
Windows Batch file
1
2
3
4
5
6
7
::удаление всех параметров в ветке
reg delete "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg" /va /f
::перебор всех подразделов и их удаление
for /f "skip=4 delims=" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg"') do reg delete "%%i" /f
 
reg delete "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder" /va /f
for /f "skip=4 delims=" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder"') do reg delete "%%i" /f
2
1779 / 761 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
03.07.2011, 17:35  [ТС] 3
atributz, а как можно сделать проверку на наличие параметров и подразделов в разделах startupreg, startupfolder, в случае их наличия удалить содержимое?
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
03.07.2011, 19:28 4
вот с проверкой даже с отдельной функцией чтоб не дублировать код.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
goto :start
:fn1
set n=--
for /f "skip=4 delims=" %%i in ('reg query %1') do (set n="%%i" & goto :next)
:next
if "%n:~1,1%"==" " reg delete %1 /va /f
for /f "skip=4 delims=" %%i in ('reg query %1') do reg delete "%%i" /f
exit /b
:start
call :fn1 "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg"
call :fn1 "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder"
1
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
04.07.2011, 18:04 5
Не понятно, к чему объявление переменной "set n=--" если в строке 4 мы её явно объявляем?
У меня ваша конструкция не работает....
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
04.07.2011, 18:26 6
Если раздел реестра пустой уже то в 4й строке переменная не будет установлена. А в 6й будет ошибка и консоль закроется.
0
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
04.07.2011, 19:55 7
Аааа... Ну, если с проверкой на пустое значение раздела - тогда понятно. Всё правильно. У меня вот проблема в другом. Я на счёт секции
Windows Batch file
1
for /f "skip=4 delims=" %%i in ('reg query %1') do reg delete "%%i" /f
хотел бы уточнить:
К примеру, у меня в ветке "HKLM\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg"
есть ещё десяток ключей, со своими параметрами типа:
"KEEPALIVES"="1"
"KEEPALIVES"="2" и т.д.
выполняю следующий код:
Windows Batch file
1
for /f "skip=2 tokens=3 delims=      " %%i in ('reg query %1') do reg delete "%%i" /f
что я делаю: пропускаю строки 1 и 2 и из второй строки вычитываю третью подстроку - т.е. значение самого ключа - это "2" и удаляю его. При этом получаю ошибку: "reg delete "2" - Invalid key name". Что я делаю не так?
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
04.07.2011, 21:49 8
Во время выполнения строчки
Windows Batch file
1
for /f "skip=2 tokens=3 delims=      " %%i in ('reg query %1') do reg delete "%%i" /f
Не должно быть значений в ветке они должны удалится предыдущей командой
Windows Batch file
1
if "%n:~1,1%"==" " reg delete %1 /va /f
Если вам надо удалять не все значения соответственно нужен другой код.

посмотрите какие строки выдает reg query
Код
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\Software\Mytest <-это ваша ветка
а вот дальше уже значения ключей и подразделов только
поэтому я и писал skip=4 чтобы обрабатывать то что нужно.
0
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
05.07.2011, 14:17 9
Вы меня, немного не поняли. Ладно, объясню техзадание:
Есть скажем, ветка реестра HKEY_LOCAL_MACHINE\Software\Mytest
в ней есть ключи типа REG_SZ, например
"KEEPALIVES"="1"
"KEEPALIVES_1"="2"
...
"KEEPALIVES_26"="2;25;27"
Нужно парсить все ключи начиная с "KEEPALIVES" и до "KEEPALIVES_26", на наличие значения ;27 и удялять
его.
В итоге, должны получит результат:
...
"KEEPALIVES_26"="2;25"

И возможно-ли вообще такое?

Добавлено через 1 час 6 минут
Использую ваш батник, вида:
Windows Batch file
1
2
3
4
5
6
7
goto :start
:fn1
for /f "tokens=3* delims=   " %%i in ('reg query %1 /v') do (
 (echo "%%i"|findstr /r /i "27") && reg delete "%%i")
exit /b
:start
call :fn1 "HKEY_LOCAL_MACHINE\Software\Mytest\"
т.е. парсю только значения всех ключей типа REG_SZ на наличие строки "27", при этом findstr отрабатывает нормально, в ключе "KEEPALIVES_26"="2;25;27" он запись находит. Но, удалять значение ключа "KEEPALIVES_26" отказывается - Error: Invalid key name
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
05.07.2011, 17:36 10
Ну и правильно что отказывается. Надо совсем по другому это делать.
0
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
05.07.2011, 17:41 11
В общем, пока работает такое вот промежуточное решение - т.е. парсю всю ветку Mytest на наличие в одном из ключей в конце "27" - и при его нахождении удаляю эту ветку.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
goto :start
:fn1
for /f "skip=4 tokens=3 delims=     " %%i in ('reg query %1') do (
 @(echo "%%i"|findstr /r /i "27\>") && set n="%%i")
goto %ERRORLEVEL%
:0
reg delete %1 /v KEEPALIVES_26 /f
:start
call :fn1 "HKEY_LOCAL_MACHINE\Software\Mytest"
:1
exit
Потом, при необходимости, можно создать ключ "KEEPALIVES_26" с нужным значением
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
05.07.2011, 18:41 12
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
goto :start
:fn1
for /f "skip=4 tokens=1,2,3 delims= " %%i in ('reg query %1') do (call :fn2 "%%i" "%%j" "%%k" %1)
exit /b
:fn2
if not "%~2"=="REG_SZ" exit /b
set z="%~1"
if not "%z:~1,1%"==" " exit /b
set x=%3
set y=%x:;27=%
if %x%==%y% exit /b
set z="%z:~5,-1%"
echo %z%
if %z%=="<безымянный>" (reg add %4 /ve /t REG_SZ  /d %y% /f & exit /b)
reg add %4 /v "%z:~5,-1%" /t REG_SZ  /d "%y%" /f
exit /b
:start
call :fn1 "HKLM\SOFTWARE\Mytest"
Добавлено через 1 минуту
там где delims= это не 5 пробелов а tab. Просто в форуме tab не отображается.
1
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
05.07.2011, 19:17 13
Цитата Сообщение от atributz Посмотреть сообщение
там где delims= это не 5 пробелов а tab. Просто в форуме tab не отображается.
Спасибо большое, за помощь! На счёт delims= , - я в курсе! Ну, а с кодом Вашим, пока "не вкурил". Буду пробовать разобрать его по косточкам - реально вещь, необходимая и нигде в Инете я ни чего похожего не нашел!
P.S. Подскажите, плиз, может такие сложные операции лучше всё таки, через VBScript делать?
0
0 / 0 / 0
Регистрация: 23.08.2019
Сообщений: 85
29.05.2020, 12:07 14
Скажите, как можно пропарсить реестр, чтобы найти имя параметра и значение параметра и удалить его?
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,437
29.05.2020, 12:36 15
Macsim228007, маловато вводных данных. Укажите раздел, примерное имя параметра, значение
0
0 / 0 / 0
Регистрация: 23.08.2019
Сообщений: 85
29.05.2020, 12:50 16
Безразницы какое. Нужно пропарсить реестр, чтобы удалить все данные например *onedrive* как в разделе так и в параметре и значении параметра во всем реестре

[HKEY_CURRENT_CONFIG\1\name11]
"name22"="name33"

В этом примере нужно удалить сначала "name33", потом "name22" потом "name11" причем "name11" может находится где угодно
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,437
29.05.2020, 13:00 17
https://ab57.ru/cmdlist/reg.html
Изучайте и сконструируйте нужную Вам команду, а цикл составить уже несложно

Добавлено через 1 минуту
Вам нужен раздел reg query
0
0 / 0 / 0
Регистрация: 23.08.2019
Сообщений: 85
29.05.2020, 13:05 18
Или нет, по другому. Не правильно высказал свою мысль

[HKEY_CURRENT_CONFIG\1\sf_onedrive]
"asdw"="fdhf"

[HKEY_CURRENT_CONFIG\1\sdasfwff]
"onedrive_we"="fghf"

[HKEY_CURRENT_CONFIG\1\ryhbn]
"scvbt"="tsw_onedrive_yt"

Вот. Везде нужно удалить onedrive по маске *onedrive*

Добавлено через 3 минуты
Я знаю про reg query, но я не могу понять как найти строку и значение, тк при поиске /v выдает

HKEY_CURRENT_CONFIG\1\2
name11 REG_SZ g

и цикл собирается удалить и "HKEY_CURRENT_CONFIG\1\2" и "name11" и "REG_SZ" и "g"
0
3048 / 1055 / 475
Регистрация: 29.05.2016
Сообщений: 4,437
29.05.2020, 13:07 19
Искать нужно только в HKEY_CURRENT_CONFIG или во всех корневых разделах?
0
0 / 0 / 0
Регистрация: 23.08.2019
Сообщений: 85
29.05.2020, 13:08 20
Не выполняется
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for %%a in (
 
name11
 
 
) do (
    for %%b in (HKCC) do (
 
        for /f "tokens=1*" %%c in ('reg query %%b /s /f "*%%a*" /v ^| find /i "%%a"') do (
            REM reg delete "%%c" /f
            echo %%c
            
        )
    )
)
0
29.05.2020, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2020, 13:08
Помогаю со студенческими работами здесь

Удаление из реестра определённого раздела только в случае нахождения в нём заданного строкового параметра
Ребят, прошу вас о помощи. Есть такая задача чистить профили пользователей каждый год на более чем...

Скопировать всё содержимое скрытого раздела в папку и наоборот
Как в командной строке скопировать всё содержимое скрытого раздела (без буквы) в папку и наоборот?

Удалить два ключа из ветки реестра
Помогите написать батник вот для такого задания: Найдите следующий раздел: ...

Как удалить определённую ветку из реестра?
Всем доброго времени суток. Проблема заключается в том, что нужно удалить папку из реестра со всеми...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru