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

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

semiono 31-05-2010 18:51 1424818

_reg2inf.bat
 
Надо сохранить ключ реестра с тремя values в файл адекватный INF формату.


Вот эти данные.



А это целевой файл в который не получилось их сохранить программно :)

Собсно задача только получить значения, остальное написать наверное даже я смогу.
Задачу надо решить средствами 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 1425103

Цитата:

Цитата semiono
задача только получить значения, остальное написать наверное даже я смогу »

Код:

@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 1425337

Код:

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
задача только получить значения, остальное написать наверное даже я смогу »

Только значения в файле, а не на экране :)

amel27 02-06-2010 05:48 1425673

Цитата:

Цитата semiono
Только значения в файле, а не на экране »

Как перенаправить стандартный вывод в файл?

semiono 02-06-2010 16:19 1426002

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

amel27 02-06-2010 17:01 1426028

Цитата:

Цитата semiono
В Вашем примере я не увидел утилиту reg.exe »

4-я строчка (в скобках)

Цитата:

Цитата semiono
тот код что тут выше не работает почему-то »

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

@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 1426196

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 1426358

Цитата:

Цитата semiono
Вообщем строки типа "Value1"=hex(0):32,e4,e2,c8,85,73,c0,01 не получились. Где то сбой. »

взял REG-файл из вашего поста #3, восстановил у себя на системе, отработал батником - INF создался и все ключи Value1-3 на месте

Цитата:

Цитата semiono
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 1426703

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


Время: 16:45.

Время: 16:45.
© OSzone.net 2001-