Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Удаление строк из регфайла... (http://forum.oszone.net/showthread.php?t=163918)

semiono 18-01-2010 22:09 1323799

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

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

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 1324639

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

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

semiono 20-01-2010 18:57 1325339

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 1325848

Цитата:

Цитата semiono
не работает »

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


Время: 06:35.

Время: 06:35.
© OSzone.net 2001-