Автор Тема: [Реестр] Удаление ключей реестра, не соответствующих маске  (Прочитано 2130 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ZeVSalt [?]

  • Новичок
  • *
  • Сообщений: 136
  • Репутация: 0
  • Пол: Мужской
  • Я не лупоглазый, это прищур такой !
    • Награды
  • Версия AutoIt: 3.3.12.0
Здравствуйте господа.
Вопрос:
Как удалить все параметры из раздела реестра, которые не соответствуют маске. Параметров может быть много, и они не известны.
раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
к примеру нужно удалить всё, за исключением: параметра со значением "C:\Program Files\Kaspersky Lab\
т.е. из автозагрузки удалить все за исключением нескольких программ.

Русское сообщество AutoIt


Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3813
  • Репутация: 1006
    • Награды
  • Версия AutoIt: 3.3.14.0
ZeVSalt
Цитировать
нужно удалить всё, за исключением
Проще удалить весь раздел и вписать только нужные ключи.

удаление ключа реестра по 1-му символу из имени

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2695
  • Репутация: 457
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
единственное - учесть права на изменения. ключи антивирей просто так не удалить, как и многие другие
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн ZeVSalt [?]

  • Новичок
  • *
  • Сообщений: 136

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Я не лупоглазый, это прищур такой !
    • Награды
  • Версия AutoIt: 3.3.12.0
как раз и антивирь не нужно удалять.
все ключи тоже не вариант удалять, так как разрядность операционных систем разная и нужные программы могут находиться либо в "C:\Program Files\ либо в "C:\Program Files(х86)\
а вписывать заведомо не рабочий ключ как то ссыкотно, порушу весь парк машин.


Добавлено: Май 12, 2016, 16:43:10
ключи выбираю все, а как удалить ненужные, которые не соответствуют маске?
Код: AutoIt [Выделить]
For $i = 1 To 100

    $var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run", $i)
    If @error Then ExitLoop
    $RegRead = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run\", $var )

    ConsoleWrite($RegRead & @CRLF)

Next



Добавлено: Май 12, 2016, 17:03:42
сделал, вроде работает
Код: AutoIt [Выделить]
For $i = 1 To 100
   $var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run", $i)
   If @error Then ExitLoop
   $StringLeft = StringLeft ($var,20)
   if $StringLeft <> "AVP" then RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run",$var)
   EndIf
Next

« Последнее редактирование: Май 12, 2016, 17:03:42 от ZeVSalt, Причина: Объединение сообщений »

Русское сообщество AutoIt


Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3813
  • Репутация: 1006
    • Награды
  • Версия AutoIt: 3.3.14.0
ZeVSalt
Цитировать
вроде работает
Интересно вы сравниваете...
Двадцать символов никогда не будут равны трём ;)
Лучше используйте StringInStr()
Код: AutoIt [Выделить]
If Not StringInStr($var, "Kaspersky") Then RegDelete(...)


Оффлайн ZeVSalt [?]

  • Новичок
  • *
  • Сообщений: 136

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Я не лупоглазый, это прищур такой !
    • Награды
  • Версия AutoIt: 3.3.12.0
Если так, тогда не работает.
Код: AutoIt [Выделить]
For $i = 1 To 100
   $HLM = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run", $i)
   If Not StringInStr($HLM, "AVP") Then RegDelete("HLM\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run",$HLM)
Next

 



Добавлено: Май 12, 2016, 18:07:30
а так работает, но почему то с одного запуска не все ключи вычищает, надо 2-3 раза запустить

Код: AutoIt [Выделить]
For $i = 1 To 100
   $HLM = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run", $i)
   $SLHLM = StringLeft ($HLM,20)
   if $SLHLM <> "AVP" then RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run",$HLM)
Next
 



Добавлено: Май 12, 2016, 18:19:40
и так тоже не работает, оставляет первый параметр, а второй удаляет, как сделать что бы несколько параметров можно было не удалять?

Код: AutoIt [Выделить]
 if $SLHLM <> "AVP" Or "qwerty" then RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run",$HLM)

« Последнее редактирование: Май 12, 2016, 18:19:41 от ZeVSalt, Причина: Объединение сообщений »

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3813
  • Репутация: 1006
    • Награды
  • Версия AutoIt: 3.3.14.0
ZeVSalt
Цитировать
тогда не работает
Естественно. У вас в пути "HLM" буква "K" пропущена.
И с двойными слешами лучше не экспериментировать.

Цитировать
с одного запуска не все ключи вычищает
Потому что, удалив ключ, нужно уменьшить $i на единицу. Иначе на место удалённого ключа встаёт следующий, который, естественно, пропускается.
Либо можно собрать все ключи в массив и удалять, читая из массива.


Добавлено: Май 12, 2016, 18:23:26
ZeVSalt
Цитировать
что бы несколько параметров
Код: AutoIt [Выделить]
if $SLHLM <> "AVP" Or $SLHLM <> "qwerty" then


Оффлайн ZeVSalt [?]

  • Новичок
  • *
  • Сообщений: 136

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Я не лупоглазый, это прищур такой !
    • Награды
  • Версия AutoIt: 3.3.12.0
да, спасибо, увидел где.

Код: AutoIt [Выделить]
   If Not StringInStr($HLM, 'AVP' Or 'qwerty' Or 'asdfg') Then RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run',$HLM)
 


так не работает, оставляет только первый параметр

Цитировать
И с двойными слешами лучше не экспериментировать.
почему? я думал они равнозначны
*** хотя на всякий случай переделал  :)


Добавлено: Май 12, 2016, 18:39:50
так работает корректно
Код: AutoIt [Выделить]
   if $SLHLM <> 'AVP' And $SLHLM <> 'qwerty' And $SLHLM <> 'asdfg' Then RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run',$HLM)
 


Русское сообщество AutoIt


Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3813
  • Репутация: 1006
    • Награды
  • Версия AutoIt: 3.3.14.0
ZeVSalt
Цитировать
так не работает
Код: AutoIt [Выделить]
If Not (StringInStr($HLM, 'AVP') Or StringInStr($HLM, 'qwerty') Or StringInStr($HLM, 'asdfg')) Then


Цитировать
я думал они равнозначны
Теоритически - да. Но при работе с удалённым реестром путь начинается с двух слешей. И как, при очередном обновлении AutoIt, поведёт себя функция - неизвестно. Короче, я вас предупредил - вы приняли решение.


Добавлено: Май 12, 2016, 18:53:47
Обновил условие.
« Последнее редактирование: Май 12, 2016, 18:53:47 от InnI, Причина: Объединение сообщений »

Оффлайн ZeVSalt [?]

  • Новичок
  • *
  • Сообщений: 136

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Я не лупоглазый, это прищур такой !
    • Награды
  • Версия AutoIt: 3.3.12.0
Код: AutoIt [Выделить]
For $a = 1 To 100

For $i = 1 To 100
   $HLM = RegEnumVal('HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run', $i)
If Not StringInStr($HLM, 'AVP') Or Not StringInStr($HLM, 'qwerty') Or Not StringInStr($HLM, 'asdfg') Then RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run',$HLM)
Next
Next

 


так же оставляет только первый параметр.

За предупреждение спасибо, поправил везде

Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3813
  • Репутация: 1006
    • Награды
  • Версия AutoIt: 3.3.14.0
ZeVSalt
В вашем случае нужно или так
Код: AutoIt [Выделить]
If Not (StringInStr($HLM, 'AVP') Or StringInStr($HLM, 'qwerty') Or StringInStr($HLM, 'asdfg')) Then

или так
Код: AutoIt [Выделить]
If Not StringInStr($HLM, 'AVP') And Not StringInStr($HLM, 'qwerty') And Not StringInStr($HLM, 'asdfg') Then


Оффлайн ZeVSalt [?]

  • Новичок
  • *
  • Сообщений: 136

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Я не лупоглазый, это прищур такой !
    • Награды
  • Версия AutoIt: 3.3.12.0
второй вариант работает нормально, спасибо


Добавлено: Май 12, 2016, 19:05:03
может кому пригодится:
Код: AutoIt [Выделить]
For $a = 1 To 100
   For $i = 1 To 100
      $HLM = RegEnumVal('HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run', $i)
      $HCU = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", $i)
      If Not StringInStr($HLM, 'AVP') And Not StringInStr($HLM, 'qwerty') And Not StringInStr($HLM, 'asdfg') Then RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run',$HLM)
      If Not StringInStr($HCU, 'AVP') And Not StringInStr($HCU, 'qwerty') And Not StringInStr($HCU, 'asdfg') Then RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", $HCU)
   Next
Next
 


Онлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3813
  • Репутация: 1006
    • Награды
  • Версия AutoIt: 3.3.14.0
ZeVSalt
Условие можно подсократить
Код: AutoIt [Выделить]
If Not StringRegExp($HLM, "(?i)avp|qwerty|asdfg") Then


Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2720
  • Репутация: 1139
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
ZeVSalt
Код: AutoIt [Выделить]
If Not StringInStr('|AVP|qwerty|asdfg|', '|' & $HCU & '|') Then


Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
3999 Просмотров
Последний ответ Март 18, 2010, 13:27:34
от Garrett
3 Ответов
5400 Просмотров
Последний ответ Сентябрь 15, 2010, 18:06:01
от Yuriy
6 Ответов
5714 Просмотров
Последний ответ Октябрь 08, 2010, 11:37:45
от Yashied
14 Ответов
15281 Просмотров
Последний ответ Март 03, 2011, 15:04:44
от berkut9737
3 Ответов
5051 Просмотров
Последний ответ Январь 30, 2012, 23:48:19
от nu3dell
2 Ответов
2236 Просмотров
Последний ответ Апрель 13, 2012, 17:43:30
от Isn
3 Ответов
2367 Просмотров
Последний ответ Октябрь 21, 2012, 03:24:07
от joiner
9 Ответов
2503 Просмотров
Последний ответ Октябрь 21, 2014, 14:37:45
от madmasles
0 Ответов
805 Просмотров
Последний ответ Октябрь 20, 2014, 13:26:08
от madmasles
2 Ответов
1046 Просмотров
Последний ответ Сентябрь 09, 2015, 19:04:21
от InnI