Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/127: Рейтинг темы: голосов - 127, средняя оценка - 4.81
sov44
1758 / 742 / 128
Регистрация: 09.04.2011
Сообщений: 1,313
1

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

03.07.2011, 00:09. Просмотров 23952. Ответов 12
Метки нет (Все метки)

Необходимо очистить содержимое разделов реестра 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2011, 00:09
Ответы с готовыми решениями:

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

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

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

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

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

12
atributz
831 / 345 / 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
sov44
1758 / 742 / 128
Регистрация: 09.04.2011
Сообщений: 1,313
03.07.2011, 17:35  [ТС] 3
atributz, а как можно сделать проверку на наличие параметров и подразделов в разделах startupreg, startupfolder, в случае их наличия удалить содержимое?
0
atributz
831 / 345 / 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
Smith&Wesson
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
04.07.2011, 18:04 5
Не понятно, к чему объявление переменной "set n=--" если в строке 4 мы её явно объявляем?
У меня ваша конструкция не работает....
0
atributz
831 / 345 / 12
Регистрация: 04.10.2009
Сообщений: 589
04.07.2011, 18:26 6
Если раздел реестра пустой уже то в 4й строке переменная не будет установлена. А в 6й будет ошибка и консоль закроется.
0
Smith&Wesson
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
atributz
831 / 345 / 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
Smith&Wesson
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
atributz
831 / 345 / 12
Регистрация: 04.10.2009
Сообщений: 589
05.07.2011, 17:36 10
Ну и правильно что отказывается. Надо совсем по другому это делать.
0
Smith&Wesson
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
atributz
831 / 345 / 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
Smith&Wesson
9 / 9 / 0
Регистрация: 05.05.2011
Сообщений: 66
05.07.2011, 19:17 13
Цитата Сообщение от atributz Посмотреть сообщение
там где delims= это не 5 пробелов а tab. Просто в форуме tab не отображается.
Спасибо большое, за помощь! На счёт delims= , - я в курсе! Ну, а с кодом Вашим, пока "не вкурил". Буду пробовать разобрать его по косточкам - реально вещь, необходимая и нигде в Инете я ни чего похожего не нашел!
P.S. Подскажите, плиз, может такие сложные операции лучше всё таки, через VBScript делать?
0
05.07.2011, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 19:17

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

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

Как удалить из реестра параметр с пробелами в названии
Как удалить параметр в реестре? Но здесь не все так просто) Имя параметра...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru