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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Export Registry Value

Ответить
Настройки темы
CMD/BAT - [решено] Export Registry Value

Аватара для semiono

Ветеран


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

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


Вот нашёл скрипты, которые дополняют утилиту 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

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:20, 21-06-2009

 

Аватара для semiono

Ветеран


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

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


Кстати, батник тоже не даст корректный файл относительно 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

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


Отправлено: 02:09, 21-06-2009 | #2



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

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


Googler


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

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


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:29, 22-06-2009 | #3


Аватара для semiono

Ветеран


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

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


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 в батнике?

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


Последний раз редактировалось semiono, 22-01-2010 в 06:37.


Отправлено: 06:27, 22-01-2010 | #4


Googler


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

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


Цитата 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. не проверял для параметров/значений с русскими буквами
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:45, 23-01-2010 | #5


Ветеран


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

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


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

Отправлено: 13:45, 23-01-2010 | #6


Googler


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

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


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

Отправлено: 15:03, 23-01-2010 | #7


Ветеран


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

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


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

Отправлено: 17:41, 23-01-2010 | #8


Аватара для semiono

Ветеран


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

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


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

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

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

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


Отправлено: 02:00, 25-01-2010 | #9


Googler


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

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


Цитата semiono:
Забавно, tmp файл не устпевает удалять почему-то, но зато он содержит то же что и регфайл. »
а он и не удаляется (для контроля), а содержит не то же самое, а временный ключ HKCU\Temp

Цитата semiono:
я там писал в автоит разделе »
не оффтопь, будет время - гляну
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:10, 25-01-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Export Registry Value

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Registry Defragmentation 9.2.1.20 OSZone Software Новости программного обеспечения 0 22-01-2010 14:30
export-reg2inf (как узнать тип данных в реестре) semiono AutoIt 1 31-12-2009 00:34
Algoware Active Directory Bulk Export 1.0 OSZone Software Новости программного обеспечения 0 03-12-2009 12:30
Registry Winner 5.6.11.20 OSZone Software Новости программного обеспечения 0 20-11-2009 20:30
Redhat/Fedora - Вопрос по командам set, env, declare, export vkostromin Общий по Linux 2 14-10-2007 16:01




 
Переход