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

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

Pozia 07-08-2009 23:14 1188514

Внесение в реестр данных через BAT файл
 
Подскажите как BAT ником вносить в реестр различные типы данных - Reg_Dword, Reg_SZ, hex... Спасибо

NiOl 08-08-2009 00:34 1188555

Если файл с данными уже имеется, то можно обычным RegEdit`ом - у него есть нигде не описанные ключи, я их подсмотрел в ранних версиях FAR:

SaveSettings.bat
Код:

@echo off
rem    This batch file saves Far settings from the registry
rem    to files FarSave1.reg and FarSave2.reg

regedit /ea FarSave1.reg HKEY_CURRENT_USER\Software\Far
regedit /ea FarSave2.reg HKEY_LOCAL_MACHINE\Software\Far

RestoreSettings.bat
Код:

@echo off
rem    This batch file restores Far settings from previously saved
rem    files FarSave1.reg and FarSave2.reg to the registry

if not exist FarSave?.reg goto import

echo REGEDIT4 > "%TEMP%\$DelOld$.reg"
echo [-HKEY_CURRENT_USER\Software\Far] >> "%TEMP%\$DelOld$.reg"
echo [-HKEY_LOCAL_MACHINE\Software\Far] >> "%TEMP%\$DelOld$.reg"

start/wait regedit -s "%TEMP%\$DelOld$.reg"
del "%TEMP%\$DelOld$.reg" > nul

:import
echo REGEDIT4 > "%TEMP%\$DelCache$.reg"
echo [-HKEY_CURRENT_USER\Software\Far\PluginsCache] >> "%TEMP%\$DelCache$.reg"
start/wait regedit -s FarSave1.reg FarSave2.reg "%TEMP%\$DelCache$.reg"
del "%TEMP%\$DelCache$.reg" > nul

а вообще полезно познакомиться с мулькой "Reg": >>

Pozia 08-08-2009 01:10 1188580

NiOl, мне нужно вот такого плана команды для всех остальных типов данных реестра:
Код:

Reg Add "HKLM\SOFTWARE\Mathsoft\Mathcad 14\FlexLM" /v LicensePath /d "%PROGRAMFILES%\Mathcad\Mathcad 14\license.dat" /F >Nul

Makzs 10-08-2009 09:12 1189901

Тип данных указывается ключом /t

Код:

Reg Add "HKLM\SOFTWARE\Mathsoft\Mathcad 14\FlexLM" /v LicensePath /t Reg_SZ /d "%PROGRAMFILES%\Mathcad\Mathcad 14\license.dat" /F >Nul
Для типа данных REG_EXPAND_SZ нужно предварять знаком ^ знак % в переменных окружения, например:

Код:

Reg Add "HKLM\SOFTWARE\Mathsoft\Mathcad 14\FlexLM" /v LicensePath /t REG_EXPAND_SZ /d "^%PROGRAMFILES^%\Mathcad\Mathcad 14\license.dat" /F >Nul

Pozia 16-08-2009 16:51 1194890

Makzs, не могу сообразить как внести батником такой вот твик:

Код:

[HKEY_CURRENT_USER\Control Panel\Desktop]
"UserPreferencesMask"=hex:90,32,07,80

помогите пожалуйста

Petya V4sechkin 16-08-2009 18:36 1194947

Pozia, а вы наберите:
Код:

Reg Add /?
Там даже пример есть.
Код:

Reg Add "HKCU\Control Panel\Desktop" /V UserPreferencesMask /T REG_BINARY /D 90320780 /F

Cyber_Maniac 24-06-2010 07:33 1440629

Уважамые, будте добры, ткните пальцем, где у меня ошибка:

нужно добавить посредствам командной строки вот эту запись:

Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile]
"SelectedServer"="\\\\192.168.44.111\\public\\nod_upd"

попытался сделать так, но говорит что ошибка в синтаксисе:

Код:

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile" /v SelectedServer /t REG_DWORD /d" \\\\192.168.44.111\\public\\nod_upd /f

sLiDeR-X 24-06-2010 07:57 1440636

Cyber_Maniac, справкой прользуйтесь!
reg add /?
там написано:
Цитата:

<КОРЕНЬ> Корневой радел. Значения [ HKLM | HKCU | HKCR | HKU | HKCC ].
REG ADD "HKLM\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile" /f /v "SelectedServer" /t REG_SZ /d "\\192.168.44.111\public\nod_upd"

HuppeR 01-07-2010 11:56 1445142

Не могу понять где ошибка...
REG ADD "HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles" /f /v "D:\Bases\Continent\" /t REG_SZ /d "Continent"
В реестр в name вносится строчка D:\Bases\Continent\" /t REG_SZ /d "Continent ?!?!
Если оставить двойные слеши то добавляется нормально, но путь к базе с двойными слешами не проканает.

рег файл видит так
[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
"f:\\Applications\\1c\\Bases\\Continent\\"="Континент"

Разобрался...в моём случаем name это пусть к базе 1с.
для того чтобы работала ставим на конце имени(в мём случаем пути) второй \
REG ADD "HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles" /f /v "D:\Bases\Continent\\" /t REG_SZ /d "Continent"

Komoliddin_Fuzaylitdinov@fb 12-08-2018 13:45 2826063

КАК открыть несколько reg файлов одним командом?
Например
Код:

regedit /s *.reg

Iska 12-08-2018 16:53 2826081

Komoliddin_Fuzaylitdinov@fb, одной — никак. Но можно — перебором:
Код:

for %i in (*.reg) do @regedit.exe /s "%~i"
Для пакетного файла:
Код:

for %%i in (*.reg) do regedit.exe /s "%%~i"

alpap 12-08-2018 17:55 2826091

Цитата:

Цитата Komoliddin_Fuzaylitdinov@fb
КАК открыть несколько reg файлов »

Код:

more *.reg

LEmiD 06-09-2018 13:56 2830238

Win 7 64
не могу вписать значение с параметрами.

Файл реестра (у вас там скорее всего тоже самое)
Код:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Unknown\shell\openas\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,25,00,53,\
  00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,\
  79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,68,00,65,00,6c,00,6c,\
  00,33,00,32,00,2e,00,64,00,6c,00,6c,00,2c,00,4f,00,70,00,65,00,6e,00,41,00,\
  73,00,5f,00,52,00,75,00,6e,00,44,00,4c,00,4c,00,20,00,25,00,31,00,00,00


Код:

reg add HKCR\Unknown\shell\openas\command /ve /t REG_EXPAND_SZ /d "%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL %1" /f
Получаю значения вместо переменных.

Если поставить ^ перед % , то и получаю всё что в кавычках ^%
Код:

reg add HKCR\Unknown\shell\openas\command /ve /t REG_EXPAND_SZ /d "^%SystemRoot^%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL %1" /f
Достаточно одной птички чтоб это не читалось переменной, но оно также пишется и в реестр.

Как записать ?
Код:

%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL %1
---
В общем получилось так
Код:

reg add HKCR\Unknown\shell\openas\command /ve /t REG_EXPAND_SZ /d ^%SystemRoot^%\system32\rundll32.exe" "^%SystemRoot^%\system32\shell32.dll,OpenAs_RunDLL" "%1 /f
убрал значение из кавычек, а в кавычки поставил пробел

Petya V4sechkin 06-09-2018 14:31 2830242

Цитата:

Цитата LEmiD
Как записать ?

Код:

reg add HKCR\Unknown\shell\openas\command /ve /t REG_EXPAND_SZ /d "%%SystemRoot%%\system32\rundll32.exe %%SystemRoot%%\system32\shell32.dll,OpenAs_RunDLL %%1" /f

LEmiD 06-09-2018 16:18 2830265

Логика как обычно гдето заблудилась.
Мой последний вариант из cmd
Цитата:

reg add HKCR\Unknown\shell\openas\command /ve /t REG_EXPAND_SZ /d ^%SystemRoot^%\system32\rundll32.exe" "^%SystemRoot^%\system32\shell32.dll,OpenAs_RunDLL" "%1 /f
получаю что надо, но если запускаю из батника, получаю полное отсутствие переменных
Цитата:

\system32\rundll32.exe \system32\shell32.dll,OpenAs_RunDLL
Беру ваш код
Цитата:

reg add HKCR\Unknown\shell\openas\command /ve /t REG_EXPAND_SZ /d "%%SystemRoot%%\system32\rundll32.exe %%SystemRoot%%\system32\shell32.dll,OpenAs_RunDLL %%1" /f
запускаю в командной строке и просто получаю лишние проценты
Цитата:

%C:\Windows%\system32\rundll32.exe %C:\Windows%\system32\shell32.dll,OpenAs_RunDLL %%1
запускаю из батника и получаю что надо
Цитата:

%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL %1
То есть батник из комадной строки запускать нельзя, а только из проводника.

Какие есть решения определить откуда запущен батник ?

Iska 06-09-2018 16:50 2830269

Цитата:

Цитата LEmiD
запускаю в командной строке и просто получаю лишние проценты »

Всё правильно. Так и должно быть при запуске непосредственно из-под командной строки.

Цитата:

Цитата LEmiD
Какие есть решения определить откуда запущен батник ? »

Это как? Поясните.

LEmiD 06-09-2018 17:24 2830272

В общем ватнику всё равно откуда он запущен.
Просто тестировал команды по одной.
Оказалось что надо тестировать в батнике

Iska 06-09-2018 17:27 2830275

LEmiD, иногда для понимания происходящего внутри пакетного файла помогает временное комментирование типичной первой строки @echo off.

juk_777 07-12-2020 10:18 2942217

Здравствуйте, уважаемые! А подскажите, пожалуйста, как с помощью CMD/BAT просто открыть нужную ветвь реестра? Ну что б без " Пуск" - Выполнить - regedit и далее..."

Vadikan 07-12-2020 10:25 2942220

reg query /?

juk_777 07-12-2020 10:49 2942224

Vadikan,
Для примера что-то не сложно показать?

Vadikan 07-12-2020 11:13 2942228

juk_777, я показал - выполните команду и увидите примеры.

YuS_2 07-12-2020 11:16 2942231

Цитата:

Цитата juk_777
что-то не сложно показать? »

Ну, хоть немного самостоятельных усилий приложить сложно?
Хотя бы запустите ту команду, которая предложена, там есть примеры... раз уж ни гугл, ни яндекс недоступны...

Iska 07-12-2020 14:38 2942251

Цитата:

Цитата juk_777
как с помощью CMD/BAT просто открыть нужную ветвь реестра? »

Именно открыть потребный раздел реестра можно, например, посредством regjump.exe из комплекта SysInternals: RegJump - Windows Sysinternals | Microsoft Docs.

alpap 07-12-2020 14:51 2942254

Именно открыть потребный раздел реестра
также и nircmd поможет это сделать:
Код:

nircmd.exe regedit "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"

juk_777 07-12-2020 18:29 2942273

Ну вот к примеру мне надо зайти в
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
Как выглядит содержимое .bat файла?

juk_777 07-12-2020 18:45 2942274

alpap,
Спасибо - то, что надо...

Vadikan 08-12-2020 17:38 2942327

Короче, открыть - это значит перейти в редакторе реестра.
Это можно и без сторонних утилит, фокусу 100 лет, потому что в реестре сохраняется последний открытый раздел.

Скрипт PowerShell на коленке
Код:

param(
        $Lastkey=""
        )

$regedit = Get-Process regedit -ErrorAction SilentlyContinue
if ($regedit) {
  $regedit.CloseMainWindow()
  Start-Sleep -Milliseconds 100
  if (!$regedit.HasExited) {
    $regedit | Stop-Process -Force
  }
}

Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" -Name Lastkey -Value $Lastkey -Type String -Force
Start-Process regedit
Remove-Variable regedit


Пример запуска
Код:

.\lastkey.ps1 -Lastkey "HKEY_CURRENT_USER\Keyboard Layout\Preload"

Iska 08-12-2020 18:45 2942334

Vadikan, нещщитово — нет запоминания предыдущего значения, ожидания закрытия и восстановления предыдущего значения :).

Но, можно оставить сие для реализации в качестве самостоятельного упражнения :lol:.

Vadikan 08-12-2020 19:07 2942338

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

Iska 08-12-2020 20:37 2942344

Vadikan, я имею в виду, что по-хорошему нужно (после того, как мы запустили редактор реестра) — дождаться его закрытия и вернуть предыдущее значение параметра Lastkey.

Vadikan 08-12-2020 21:28 2942352

Iska, зачем вносить предыдущее значение параметра? Ведь нормальное поведение регедит - сохранять последний раздел. Что он и сделает, когда пользователь закроет приложение [после открытия его скриптом].

Iska 08-12-2020 21:54 2942354

Vadikan, Ваша мысль понятна и в данном случае вполне имеет право на жизнь. Это я перфекционист :).


Время: 09:51.

Время: 09:51.
© OSzone.net 2001-