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

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

shadowbat 20-08-2014 17:35 2391861

сохранить несколько веток реестра и добавить строчку в reg файл
 
Здравствуйте
подскажите, как сохранить две ветки реестра в один reg файл
но в начале файла еще добавить те же ветки с "-"

делаю так, но похоже, что 0.reg имеет не ту кодировку. слияние 0+1+2 не получается правильным
Код:

@echo off

echo Windows Registry Editor Version 5.00 >> 0.reg
echo [-HKEY_CURRENT_USER\Software\zzz1] >> 0.reg
echo [-HKEY_CURRENT_USER\Software\zzz2] >> 0.reg

reg export "HKEY_CURRENT_USER\Software\zzz1" "1.reg"
reg export "HKEY_CURRENT_USER\Software\zzz2" "2.reg"
copy "0.reg"+"1.reg"+"2.reg" "registry.reg"
del 0.reg
del 1.reg
del 2.reg

назначение файла registry.reg - загрузить сохранённые ветки реестра, но перед добавлением удалить прошлые, чтобы не осталось лишних ключей

Georgio 20-08-2014 20:10 2391926

Код:

@echo off

set "branch=HKEY_CURRENT_USER\Software\"
set "soft_1=zzz1"
set "soft_2=zzz2"

(
for %%i in (
 "Windows Registry Editor Version 5.00"
 ""
 "[-%branch%%soft_1%]"
 ""
 "[-%branch%%soft_2%]"
 ""
 ) do (
 echo.%%~i
 )
)>"registry.reg"

for %%i in (
 "%soft_1%"
 "%soft_2%"
 ) do (
 reg export "%branch%%%~i" .reg /y>nul
 more +2<.reg>>"registry.reg"
 )
del .reg

exit /b


shadowbat 20-08-2014 20:21 2391930

Georgio спасибо ! получилось

shadowbat 21-08-2014 12:17 2392193

а как можно сделать выгрузку мультиязычной?
по умолчанию вместо русских ключей кракозябры
если добавить chcp 1251, то русский язык (например путь до файла) будет хорошо выгружаться, а например какой-нибудь испанский тогда не будет выгружаться?
это же не совсем правильно, когда выгружается не в том виде, в котором оно в реестре
можно ли выгрузить ветки реестра с сохранением любого языка - будь то русский или франзуцский?

как показывает AkelPad, "чистая" команда "reg export" делает файл в 1200 кодировке (наделал в реестре разных языков для проверки)
в начало bat вставил chcp 1200, но это не помогло

Georgio 21-08-2014 13:08 2392222

Код:

@echo off

set "branch=HKEY_CURRENT_USER\Software\"
set "soft_1=zzz1"
set "soft_2=zzz2"

(
for %%i in (
 "Windows Registry Editor Version 5.00"
 ""
 "[-%branch%%soft_1%]"
 ""
 "[-%branch%%soft_2%]"
 ""
 ) do (
 cmd /u /c echo.%%~i
 )
)>"registry.reg"

for %%i in (
 "%soft_1%"
 "%soft_2%"
 ) do (
 reg export "%branch%%%~i" 1.reg /y
 copy "registry.reg"+1.reg 2.reg>nul
 )
move 2.reg "registry.reg">nul
del 1.reg
ping -n 3 localhost>nul
exit /b


shadowbat 21-08-2014 13:33 2392233

Спасибо, вы мастер!

не выгружает первую ветку :)
-zzz1
-zzz2
zzz1 - нет в reg (вместо нее фраза Windows Registry Editor Version 5.00)
zzz2

Iska 21-08-2014 13:51 2392245

shadowbat, Вы бы выложили для эксперимента оба Ваши раздела, и «HKEY_CURRENT_USER\Software\zzz1», и «HKEY_CURRENT_USER\Software\zzz2», упаковав их в архив.

shadowbat 21-08-2014 13:56 2392248

Вложений: 1
архив с файлами

Georgio 21-08-2014 14:04 2392251

shadowbat, а так:


Код:

@echo off

set "branch=HKEY_CURRENT_USER\Software\"
set "soft_1=zzz1"
set "soft_2=zzz2"

(
for %%i in (
 "Windows Registry Editor Version 5.00"
 ""
 "[-%branch%%soft_1%]"
 ""
 "[-%branch%%soft_2%]"
 ""
 ) do (
 cmd /u /c echo.%%~i
 )
)>"registry.reg"

for %%i in (
 "%soft_1%"
 "%soft_2%"
 ) do (
 reg export "%branch%%%~i" 1.reg /y
 copy "registry.reg"+1.reg 2.reg>nul
 move 2.reg "registry.reg">nul
 )
del 1.reg
ping -n 3 localhost>nul

exit /b


?

shadowbat 21-08-2014 14:14 2392253

да, так отлично!

shadowbat 21-08-2014 14:54 2392275

тема никак не хочет нас отпускать

выгрузилось отлично
а при загрузке:



если на файл нажать "изменить" и после того как он откроется в блокноте "сохранить" - данные успешно добавляются в реестр

пересохраненный и исходный файлы отличаются на два первых байта.
(слева реестр, справа файл сделанный через bat)

shadowbat 21-08-2014 18:09 2392362

echo . >>registry.reg
добавляет неопознанный знак в файл reg, но он все равно не загружается в реестр через открытие мышкой
akelpad показывает *BOM у "неправильного" reg файла

у правильных reg файлов *BOM не стоит

как бы его вылечить
---

вот костыль. работает, хотя очень не по людски
открыть-закрыть-сохранить через блокнот
добавить в bat в конце
Код:

@echo off
start /d C:\Windows\System32\ notepad.exe %CD%\registry.reg

echo With CreateObject("WScript.Shell"):.AppActivate "Блокнот":.SendKeys "^S":End With > "C:\S.vbs"
cscript "C:\S.vbs"
del "C:\S.vbs"

echo With CreateObject("WScript.Shell"):.AppActivate "Блокнот":.SendKeys "%%{F4}":End With > "C:\f4.vbs"
cscript "C:\f4.vbs"
del "C:\f4.vbs"

может есть попроще решение?
тут даже ключ start /min не проходит. получается блокнотом сверкает

Georgio 21-08-2014 19:36 2392399

Цитата:

Цитата shadowbat
тема никак не хочет нас отпускать »



shadowbat, "обманул" несовпадение кодировок, получилось, по-моему, коротко и действенно:


Код:

@echo off

set "branch=HKEY_CURRENT_USER\Software\"
set "soft_1=111"
set "soft_2=222"

reg add "%branch%$$$" /f>nul
reg export "%branch%$$$" "registry.reg" /y>nul
reg delete "%branch%$$$" /f>nul

(
for %%i in (
 "[-%branch%$$$]"
 ""
 "[-%branch%%soft_1%]"
 ""
 "[-%branch%%soft_2%]"
 ""
 ) do (
 cmd /u /c echo.%%~i
 )
)>>"registry.reg"

for %%i in (
 "%soft_1%"
 "%soft_2%"
 ) do (
 reg export "%branch%%%~i" 1.reg /y
 copy "registry.reg"+1.reg 2.reg>nul
 move 2.reg "registry.reg">nul
 )
del 1.reg
ping -n 3 localhost>nul

exit /b


.

shadowbat 21-08-2014 19:56 2392407

Цитата:

по-моему, коротко и действенно
конечно коротко! по сравнению с моими то выкрутасами
спасибо! Вы очень помогли

Iska 21-08-2014 21:59 2392477

Цитата:

Цитата shadowbat
у правильных reg файлов *BOM не стоит »

Как раз таки у правильных — «стоит».


Время: 22:44.

Время: 22:44.
© OSzone.net 2001-