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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Export Registry Value (http://forum.oszone.net/showthread.php?t=143135)

semiono 21-06-2009 01:20 1147902

Export Registry Value
 
Вот нашёл скрипты, которые дополняют утилиту reg.exe. Именно возможность экспорта конкретных параметров, чего мне не доставало!

Код:

Building a reg file and display it in Notepad:
--------------------8<----------------------
@echo off
setlocal
set rkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
set rvalue="RegisteredOwner"
set regexe=%SystemRoot%\System32\Reg.exe
for /f "Skip=4 Tokens=3" %%a in ('%regexe% QUERY "%rkey%" /v %rvalue%') do (
set rdata=%%a
)

set regfile="c:\my tst.reg"

echo REGEDIT4>%regfile%
echo.>>%regfile%
echo [%rkey%]>>%regfile%
echo %rvalue%^="%rdata%">>%regfile%
echo.>>%regfile%

start notepad.exe %regfile%

endlocal
--------------------8<----------------------

Код:

Just dumping the registry value data to a text file:
--------------------8<----------------------
@echo off
setlocal
set rkey=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
set rvalue="RegisteredOwner"
set regexe=%SystemRoot%\System32\Reg.exe
for /f "Skip=4 Tokens=3" %%a in ('%regexe% QUERY "%rkey%" /v %rvalue%') do (
set rdata=%%a
)

echo %rdata% >c:\tst.txt
start notepad.exe c:\tst.txt
endlocal
--------------------8<----------------------

http://www.tech-archive.net/Archive/.../msg00051.html

semiono 21-06-2009 02:09 1147925

Кстати, батник тоже не даст корректный файл относительно REG_EXPAND_SZ

Код:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
"ComSpec"="%SystemRoot%\system32\cmd.exe"

Или это для REGEDIT версии 4 нормально?
Обычно ведь REG_EXPAND_SZ записываентся в виде hex(2):61,00,62,00,63...00,00

amel27 22-06-2009 07:29 1148673

semiono, нормальные герои всегда идут в обход (c) :)
Код:

@Echo Off

Set $R_REG=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Set $R_VAL=ComSpec

Set $R_TMP=HKEY_CURRENT_USER\Temp
Set $F_REG=%~dpn0.reg
Set $F_TMP=%~dpn0.tmp

Set $N=1
For %%i In (%$R_VAL%) Do Set /A $N+=1

Reg Delete "%$R_TMP%" /f
If Exist "%$F_TMP%" DEL /F/Q "%$F_TMP%"
If Exist "%$F_REG%" DEL /F/Q "%$F_REG%"

For /F "Tokens=%$N%* Delims=        " %%i In ('REG Query "%$R_REG%" /v "%$R_VAL%"^|FindStr /IBRC:^" *%$R_VAL% *        *REG_^"') Do REG ADD "%$R_TMP%" /v "%$R_VAL%" /t %%i /f /d "%%j"
Reg Export "%$R_TMP%" %$F_TMP%

For /F "Delims=:" %%i In ('Type "%$F_TMP%"^|FindStr /BNC:^"[^"') Do Set $M=%%i
For /F "Tokens=1* Delims=:" %%i In ('Type "%$F_TMP%"^|FindStr /BVNC:^"]^"') Do (
  If %%i EQU %$M% (
      Echo.[%$R_REG%]>>%$F_REG%
  ) ELSE (
      Echo.%%j>>%$F_REG%
  )
)

Цитата:

Цитата semiono
Или это для REGEDIT версии 4 нормально? »

Как создавать, изменять или удалять подразделы и значения системного реестра с помощью файла записей регистрации (.reg)

P.S. нашел глюк в Win2003 - REG.Exe выводит REG_EXPAND_SZ как REG_SZ

semiono 22-01-2010 06:27 1326644

amel27, надо довести батник до результата, пожалуйста!

Прокоментирую кое что из сказанного
Цитата:

1. по всем REG-файлам заменить "[HKEY_" на "[HKEY_CURRENT_USER\TMP\HKEY_";
Не совсем понял зачем краткую запись на полную менять, причём в батнике итак будет полное название кустов. Но смысл вобщем-то понятен, то что всё перекачать в TMP ветку, "ну это нормально".
Цитата:

2. загрузить все полученные REG-файлы (через "REGEDIT /S" или "REG IMPORT");
Не знаю есть ли смысл пользоваться regedit.exe? Мне проще через reg.exe обычно.
Цитата:

3. стандартными REG-функциями почистить ветку "HKCU\TMP" от лишних параметров;
С этим всё понятно, правда хотелсоь бы не перечислять, то что надо удалить, а скорее наоборот.
Но похоже что это неразрешимая проблема для reg.exe утилиты. (хотя если подумать может автоитом тут почистить)
Код:

4. выгрузить "HKCU\TMP" в новый REG-файл ("REGEDIT /E" или "REG EXPORT");
5. в новом REG-файле заменить "[HKEY_CURRENT_USER\TMP\HKEY_" на "[HKEY_";

Ну и это работа для автоита, кроме самой выгрузки через reg.exe, так как он делает ценное
формирование EXPAND_SZ строк в свой embedded вид :)
Если это всё можно батником зделать, это хорошо, но для меня это высший пилотаж,
лучше уж готовое покажите.

Цитата:

Цитата amel27
нормальные герои всегда идут в обход »

Угу, мне лишь данные надо в виде msreg, но а как это получить, это дело хозяйское. :)
Вообще-то порабы утилиту написать, раз уж такое дело в винде.
Можно много чего из бинарей найти, но reg.exe alternative что-то ни у кого руки не доходят жаль.
Хотя бы из скриптов соорудить! =)

ЗЫ
Цитата:

вопросы по батнику - в соответствующую тему, замечу только, что работа REG.EXE сильно зависит от языка текущей локали и версии ОС (XP/2003/...)
Но у меня хелп reg.exe в консоли отображается нормально. Русский ввод в cmd тоже работает.
У меня WinXP SP3 ENG Pro... Может с профилями чего не так? Что там за token в батнике?

amel27 23-01-2010 04:45 1327492

Цитата:

Цитата semiono
надо довести батник до результата »

Извиняюсь, но ты комментируешь мой ответ в тему, где сформулирована совсем другая задача: ТАМ результат формируется из нескольких REG-файлов путем отсеивания ненужных параметров, а ТУТ берутся конкретные (т.е. с заведомо известными типами и именами) параметры из реестра и загоняются в REG-файл... Может сначала определиться с постановкой задачи и инструментом (не указывать жестко категорию), а не плодить одинаковые темы?

Цитата:

Цитата semiono
есть ли смысл пользоваться regedit.exe? »

Хотя бы потому, что он умеет экспортировать в WIN-кодировке, а не только юникоде, как REG.EXE... Вот батник из 3-го поста, переделанный для XP (первый батник тестил на Win 2003) - использование RegEdit вместо REG существенно упрощает код:
Код:

@Echo Off

Set $R_REG=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Set $R_VAL=ComSpec

Set $R_TMP=HKEY_CURRENT_USER\Temp
Set $F_REG=%~dpn0.reg
Set $F_TMP=%~dpn0.tmp

Set $N=1
For %%i In (%$R_VAL%) Do Set /A $N+=1

Reg Delete "%$R_TMP%" /f >Nul 2>&1
If Exist "%$F_TMP%" DEL /F/Q "%$F_TMP%"
If Exist "%$F_REG%" DEL /F/Q "%$F_REG%"

For /F "Tokens=%$N%* Delims=        " %%i In (
'REG Query "%$R_REG%" /v "%$R_VAL%"^|FindStr /IBRC:"[        ]*%$R_VAL%[        ][        ]*REG_"'
) Do REG ADD "%$R_TMP%" /v "%$R_VAL%" /t %%i /f /d "%%j" >Nul
RegEdit /E:A "%$F_TMP%" "%$R_TMP%"

For /F "Delims=:" %%i In ('FindStr /BNC:^"[^" "%$F_TMP%"') Do Set $M=%%i
For /F "Tokens=1* Delims=:" %%i In ('FindStr /BVNC:^"]^" "%$F_TMP%"') Do (
  If %%i EQU %$M% (
      Echo.[%$R_REG%]>>%$F_REG%
  ) ELSE (
      Echo.%%j>>%$F_REG%
  )
)

P.S. не проверял для параметров/значений с русскими буквами

Iska 23-01-2010 13:45 1327668

amel27, reg.exe (во всяком случае, в версии для XP) поддерживает неупоминаемый унаследованный ключ «/nt4». Впервые обнаружил упоминание об этом ключе здесь же: REG EXPORT … /nt4.

amel27 23-01-2010 15:03 1327717

Iska, я знал что такой ключ есть, но забыл, поэтому акцентировал намеренно, в надежде что кто-нибудь напомнит, спасибо... ;)

Iska 23-01-2010 17:41 1327861

amel27, самое интересное то, что я, в общем-то, обратил тогда внимание на тот вышеуказанный пост сугубо потому, что там стояла Ваша пометка о полезности :). Иначе, думаю, запросто прошёл бы мимо.

читать дальше »
А потом уже читал в подробностях, кажись, у Rob'а van der Woude'а и, раскопав старую версию «reg.exe» (правда, не первую — не нашёл, а вторую, из комплекта «Microsoft Windows 2000 Support Tools»), посмотрел, что, да, действительно, был такой параметр:
Цитата:

Цитата reg.exe export /?
Код:

Registry Console Tool For Windows 2000 - version 2.0
Copyright (C) Microsoft Corp. 1981-1999.  All rights reserved

REG EXPORT KeyName FileName [/nt4]
  …
  /nt4      Output reg file as old NT4 format
  …


Что ещё хотел заметить… Чем удобен данный движок (ну, или, может, сие расширениями сделано, не знаю) — можно пользовать ссылку «Добавить в Избранное» под постом. На мой взгляд, весьма полезная возможность. Я так себе уже набрал двенадцать штук избранных сообщений, прежде всего те, про которые могу забыть; в том числе и тот вышеупомянутый пост.

semiono 25-01-2010 02:00 1329018

Цитата:

Цитата amel27
не проверял для параметров/значений с русскими буквами »

Нормально работает!
Забавно, tmp файл не устпевает удалять почему-то, но зато он содержит то же что и регфайл. :)
Так что сразу аж два получается. ))

amel27, я не знаю может времени нет, но я там писал в автоит разделе, что есть ошибка,
может не видел? Причём очень существенная! А сам скрипт очень полезен и нужен.

http://forum.oszone.net/thread-143253-3.html

amel27 25-01-2010 03:10 1329050

Цитата:

Цитата semiono
Забавно, tmp файл не устпевает удалять почему-то, но зато он содержит то же что и регфайл. »

а он и не удаляется (для контроля), а содержит не то же самое, а временный ключ HKCU\Temp

Цитата:

Цитата semiono
я там писал в автоит разделе »

не оффтопь, будет время - гляну

semiono 25-01-2010 03:43 1329061

Цитата:

Цитата amel27
не оффтопь, будет время - гляну »

:gitara: +1

kokos76 09-01-2016 16:14 2592794

-deleted-


Время: 08:46.

Время: 08:46.
© OSzone.net 2001-