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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Удаление строк из регфайла...

Ответить
Настройки темы
Удаление строк из регфайла...

Аватара для semiono

Ветеран


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

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


Изменения
Автор: semiono
Дата: 18-01-2010
Очень похоже, что трудная тема и даже если имеет решение, то какое нибудь экзотическое, но всёравно спрошу.

Во-первых, как можно объединить контент двух регфайлов, здесь сразу же возникает проблемма удаления одного из лишних заголовков?
Код: Выделить весь код
Windows Registry Editor Version 5.00

...
Windows Registry Editor Version 5.00

...
Но более сложно, мне нужно очистить регфайл от лишних строк...
Формат хочу сохранить традиционный, поэтому юзаю стандартный (microsoft) reg.exe export [ key + subkey ] file.reg

Можно ли удалить все строки исключив избранные($var) , причём фильтровать нужно по именам параметров,
так как не гарантированно, что они в алфавитном порядке идут, и надо как-то узнать конец для строк значений,
ибо возможны переносы \ в MULTI_SZ
Но если возможно, то на первый случай хотябы только DWORD, STRING и EXPAND_SZ обработать, так как более сложные
реже встречаются в HKEY\SOFTWARE практически.
Но для более общего случая очень бы хотелось, чтоб всё было.

И ещё надо удалить ненужные пустые разделы-заголовки...
Типа те которые не содержут параметров вообще...
Код: Выделить весь код
[HKEY_LOCAL_MACHINE\Software\a]
...
[HKEY_LOCAL_MACHINE\Software\abcd]
тут пусто

[HKEY_LOCAL_MACHINE\Software\b]
...
И ещё одно условие, пожалуй ещё труднее, надо не просто удалить лишний контент, но и так чтобы пустые пространства
на месте строк не оставались. ???

---
Я даже приведу пример, чтоб было наглядно, хотя это более сложный случай, так как экспортировать весь HCCR это слишком накладно,
чтоб потом его разбирать, но зато как пример подходит!

Как получить такое:
Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.rar]
@="WinRAR"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR\DefaultIcon]
@="C:\\I\\Apps\WinRar\\WinRAR.exe,1"
(Это только пример без expand_sz сторок, которые тоже нужны будут в другом случае!)

Если здесь воспользоваться RegRead() au3 то потом более проблематично создавать Windows Registry Editor V5.00 - валидный файл,
так как переносы строк expand_sz там мудрённо как-то выщитываются, да и потом конвертировать в строку байтов с запятыми,
там фиг разберёшся. Мне более нормальным представляется очистка готового файла от лишних строк, об чём и речь.
Помогите пожалуйста!

На худой конец можно зделать INI файл того же содержания...
То-есть такой

Код: Выделить весь код
[Version]
Signature=$Windows NT$

[DefaultInstall]
AddReg=Add.Reg

[Add.Reg]
и здесь избирательно нужные строки параметров реестра....
Условия таковы, что я заранее всегда знаю имена параметров, но я не знаю заведомо их будущие значения, которые получу из реестра!
Кстати, здесь проблемма автоит в том, что тут нету логики a=b для реестра!
Вот формат строки примерно
HKLM,"Software\Classes\AVIFile\Extensions\AVI",,0,"{00020000-0000-0000-C000-000000000046}"
как видите без равенства "="

-------
Полезное сообщение


Отправлено: 22:09, 18-01-2010

 

Аватара для semiono

Ветеран


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

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


Я на досуге думал об этом и вот что надумалось!...
Надо только сграбить "бинарные" строки в какуюнибудь переменную.
Остальные строки не представляют проблему.
Значит надо только найти начало по =hex "признаку" и конец (всей) строки,
ну скажем по начальным кавычкам '"' следущего параметра наверно?
Но я только не знаю есть ли возможность сохранить этот контент строк в том виде
как он записан в регфайле, чтобы его вбить в переменную $var1 ?
Тогда было бы можно просто её вписать в новый файл.

Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\New Key #1]
"New Value #1"=hex(2):31,00,32,00,33,00,34,00,35,00,36,00,37,00,38,00,39,00,61,\
  00,62,00,63,00,64,00,65,00,66,00,67,00,68,00,69,00,6a,00,6b,00,6c,00,6d,00,\
  6e,00,6f,00,70,00,71,00,72,00,73,00,74,00,75,00,76,00,77,00,78,00,79,00,7a,\
  00,00,00
"New Value #2"=hex(2):00,00

Есть ли способ схватить такое:

(2):31,00,32,00,33,00,34,00,35,00,36,00,37,00,38,00,39,00,61,\
00,62,00,63,00,64,00,65,00,66,00,67,00,68,00,69,00,6a,00,6b,00,6c,00,6d,00,\
6e,00,6f,00,70,00,71,00,72,00,73,00,74,00,75,00,76,00,77,00,78,00,79,00,7a,\
00,00,00

как дамп строк с переносами и пробелами??
Да вот вспомнил, это массив обычно называется...

-------
Полезное сообщение


Отправлено: 21:32, 19-01-2010 | #2



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

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


Googler


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

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


semiono, предлагаю более простой способ:

1. по всем REG-файлам заменить "[HKEY_" на "[HKEY_CURRENT_USER\TMP\HKEY_";
2. загрузить все полученные REG-файлы (через "REGEDIT /S" или "REG IMPORT");
3. стандартными REG-функциями почистить ветку "HKCU\TMP" от лишних параметров;
4. выгрузить "HKCU\TMP" в новый REG-файл ("REGEDIT /E" или "REG EXPORT");
5. в новом REG-файле заменить "[HKEY_CURRENT_USER\TMP\HKEY_" на "[HKEY_";
6. удалить ключ "HKCU\TMP" (для надежности можно и перед шагом 1).

P.S. кста я уже предлагал тебе подобное: CMD/BAT - Export Registry Value
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:26, 20-01-2010 | #3


Аватара для semiono

Ветеран


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

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


amel27, проверяю тот батник по ссылке, пишет:

Код: Выделить весь код
Error:  The system was unable to find the specified registry key or value

Error:  The system was unable to find the specified registry key or value
The system cannot find the file specified.
The syntax of the command is incorrect.
я не очень разбираюсь в батниках, хочу только сказать что может кавычки нужны, но ито не работает
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
или так
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\"Control\Session Manager\Environment"
и ещё я обычно ControlSet001 юзаю, никогда не подводило, хотя понимаю что текущий сет правильней, но не в этом дело...
ещё у меня английский дистр, поэтому некое "Мой компьютер" может глючить! Но не знаю в чём дело.

...предлагаешь зделать экспорт в временный кей! А ну я понял! Интересная идея!
Забавно, надо подумать...

-------
Полезное сообщение


Последний раз редактировалось semiono, 20-01-2010 в 21:14.


Отправлено: 18:57, 20-01-2010 | #4


Googler


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

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


Цитата semiono:
не работает »
вопросы по батнику - в соответствующую тему, замечу только, что работа REG.EXE сильно зависит от языка текущей локали и версии ОС (XP/2003/...)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:06, 21-01-2010 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Удаление строк из регфайла...

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать??? VladZombie Скриптовые языки администрирования Windows 70 08-09-2020 13:28
CMD/BAT - [решено] Сборка регфайла и фильтрация... semiono Скриптовые языки администрирования Windows 6 23-01-2010 05:55
Разное - Группировка строк в экселе pva Программирование и базы данных 6 16-04-2009 12:41
Разное - количество строк WinXP Abracadabra Хочу все знать 7 11-02-2008 23:05
добавления строк в файл e9990638 Автоматическая установка приложений 5 18-01-2007 18:35




 
Переход