PDA

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


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

Во-первых, как можно объединить контент двух регфайлов, здесь сразу же возникает проблемма удаления одного из лишних заголовков?
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}"
как видите без равенства "="

semiono
19-01-2010, 21:32
Я на досуге думал об этом и вот что надумалось!...
Надо только сграбить "бинарные" строки в какуюнибудь переменную.
Остальные строки не представляют проблему.
Значит надо только найти начало по =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

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

amel27
20-01-2010, 14:26
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 (http://forum.oszone.net/thread-143135.html)

semiono
20-01-2010, 18:57
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 юзаю, никогда не подводило, хотя понимаю что текущий сет правильней, но не в этом дело...
ещё у меня английский дистр, поэтому некое "Мой компьютер" может глючить! Но не знаю в чём дело.

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

amel27
21-01-2010, 11:06
не работает »вопросы по батнику - в соответствующую тему, замечу только, что работа REG.EXE сильно зависит от языка текущей локали и версии ОС (XP/2003/...)




© OSzone.net 2001-2012