PDA

Показать полную графическую версию : [решено] _reg2inf.bat


semiono
31-05-2010, 18:51
Надо сохранить ключ реестра с тремя values в файл адекватный INF формату.

http://j.imagehost.org/0295/Snap1_1.png
Вот эти данные.


http://h.imagehost.org/0957/Snap2.png
А это целевой файл в который не получилось их сохранить программно :)

Собсно задача только получить значения, остальное написать наверное даже я смогу.
Задачу надо решить средствами reg.exe, cmd.exe итп. то-есть встроенными средствами,
утилиту reg2inf я не хочу использовать, так как она зависима от dotnetfx.

Данные inf будут выглядеть так, если вдруг непонятно, напр. "32,e4,e2,c8,85,73,c0,01"

P.S. 0x4000 - это флаг у меня для x64-Wow6432Node совместимости если кому интересно...
Однако сами данные REG_NONE тоже необычного типа, но я думаю это тот же REG_BINARY физически :)

amel27
01-06-2010, 08:59
задача только получить значения, остальное написать наверное даже я смогу »

@Echo Off

Set HIV=HKLM
Set KEY=Software\Classes\Trilogy

For /F "Tokens=1,3 Delims= " %%i In ('REG QUERY "%HIV%\%KEY%"^|Find "REG_NONE"') Do (
Set VAL=%%i& Set BIN=%%j& Set INF=& Call :BIN2INF)
Exit

:BIN2INF
Set INF=%INF%,%BIN:~,2%
Set BIN=%BIN:~2%
If Not "%BIN%"=="" GoTo BIN2INF
Echo %HIV%,"%KEY%","%VAL%",0x20001%INF%
GoTo :EOF


P.S. для экономии чужого времени используйте тег CODE вместо картинок

semiono
01-06-2010, 16:37
Find: REG_NONE: No such file or
Press any key to continue . . .
Паузу я добавил, что хоть ошибку увидеть.
А файл INF сам создастья? Или он должен быть. К сожалению, я не понял.


Вот экспорт реестра...
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Trilogy]
"Value3"=hex(0):44,3a,5c,26,6e,5c,32,31,5c,54,72,69,6c,6f,67,79,2e,64,61,74,00
"Value1"=hex(0):32,e4,e2,c8,85,73,c0,01
"Value2"=hex(0):88,a6,ea,1f



задача только получить значения, остальное написать наверное даже я смогу »
Только значения в файле, а не на экране :)

amel27
02-06-2010, 05:48
Только значения в файле, а не на экране »
Как перенаправить стандартный вывод в файл? (http://www.rsdn.ru/article/winshell/batanyca.xml#ERBAC)

semiono
02-06-2010, 16:19
Какой сильный блог по батникам! Пожалуй я с него учиться начну даже.
Однако, amel27, тот код что тут выше не работает почему-то?
....Я вообще-то предполагал такой ход мысли, сначала экспортируется HKLM\Software\Classes\Trilogy,
так как все три value в нём "нам" нужны, например, reg.exe... Но потом надо просто модифицыровать
полученный файл reg > inf в чём я уже не силён.
В Вашем примере я не увидел утилиту reg.exe поэтому вообще не понимаю как это работает,
да и код слишком сложный для меня )
---
Кстати, можно использовать какой нибудь grep или sed из GnuWin32 коллекции,
только такое чтоб утилиту можно было с сборкой носить вместе с собой, какойнить файлик exe без зависимостей. ??
Это само собой вопрос, так как я не шарю в gnu утилитах так же как и в батниках к сожалению.

amel27
02-06-2010, 17:01
В Вашем примере я не увидел утилиту reg.exe »4-я строчка (в скобках)

тот код что тут выше не работает почему-то »код всегда (как-то) работает, вопрос только как надо или что (конкретно) не устраивает... сами же сказали - "только получить значение"... но если надо, вот полный вариант:

@Echo Off

Set INF=%~n0.inf
Set HIV=HKLM
Set KEY=Software\Classes\Trilogy

(Echo [Version]
Echo Signature=$Windows NT$
Echo.
Echo [DefaultInstall]
Echo AddReg=Add.Reg
Echo.
Echo [Add.Reg]
Echo HKLM,"Software\Microsoft\Windows\CurrentVersion\App Path\Trilogy.exe",,0x4000,"G:\$_\Proton\Trilogy\Trilogy.exe"
Echo HKLM,"Software\Microsoft\Windows\CurrentVersion\App Path\Trilogy.exe","Path",0x4000,"G:\$_\Proton\Trilogy"
)>%INF%

For /F "Tokens=1,3 Delims= " %%i In ('REG QUERY "%HIV%\%KEY%"^|Find "REG_NONE"') Do (
Set VAL=%%i& Set BIN=%%j& Set STR=& Call :BIN2INF)
Exit /B

:BIN2INF
Set STR=%STR%,%BIN:~,2%
Set BIN=%BIN:~2%
If Not "%BIN%"=="" GoTo BIN2INF
Echo %HIV%,"%KEY%","%VAL%",0x20001%STR%>>%INF%
GoTo :EOF

semiono
02-06-2010, 21:40
amel27, отлично!!! Очень хорошо! Я виноват, недоходчиво объясняю как всегда!
Мне надо эти строчки:

"Value3"=hex(0):44,3a,5c,26,6e,5c,32,31,5c,54,72,69,6c,6f,67,79,2e,64,61,74,00
"Value1"=hex(0):32,e4,e2,c8,85,73,c0,01
"Value2"=hex(0):88,a6,ea,1f

Из первого поста картинка - http://j.imagehost.org/0295/Snap1_1.png
Но то что строчки из Software\Microsoft\Windows\CurrentVersion\App Path\Trilogy.exe сохранились это не плохо, это тоже пригодится.
Хм. может я сам переделаю, просто заменив значения? Но если есть время лучше с вашей помощью,
ато я понаделаю косяков.

(смысл в том что все эти Values могут иметь случайное значение, поэтому их надо именно считать из реестра,
но длина их как я понял фиксированная, хотя это наверное не важно.)

--- Ой! Я кажись понял, наверное эти Value просто не считались этим батником! Хм... тогда глюк выходит. :(
Вообщем строки типа "Value1"=hex(0):32,e4,e2,c8,85,73,c0,01 не получились. Где то сбой. :(
----
А вообще идея очень интересная, добраться до value через /QUERY и перенаправить вывод в файл,
я в это врубился приблизительно, крута!

amel27
03-06-2010, 05:42
Вообщем строки типа "Value1"=hex(0):32,e4,e2,c8,85,73,c0,01 не получились. Где то сбой. »взял REG-файл из вашего поста #3, восстановил у себя на системе, отработал батником - INF создался и все ключи Value1-3 на месте

Find: REG_NONE: No such file or »
попробую включить телепатию - у Вас вместо штатного FIND.EXE (%windir%\System32\) вызывается другой... кстати, очень похоже на FIND из пакета "GNU utilities for Win32" - наберите в командной строке: "FIND /?" (win) или "find --help" (nix), проверьте переменную PATH и т.п.

semiono
03-06-2010, 16:23
Телепатия сработала!!! :laugh: У меня действительно натыкано GNU utilities for Win32 там!
Правда я уже давно решил переименовать их в find32.exe вид, чтоб не путаться.
Хорошо, раз работает верю! :) Буду у себя рыть!




© OSzone.net 2001-2012