Як змінити дані існуючого імені значення ключа реєстру з cmd?


19

Як змінити існуюче значення ключа реєстру з cmd?

Для команди Reg існує безліч варіантів і перемикачів, дзвіночків і свистків. Є варіанти запиту, додавання та видалення ключів, підрозділів та імен значень. Але як ви змінюєте дані існуючого імені значення? Ви повністю видалите ім'я значення, а потім знову додаєте його та повторно набираєте змінене значення / дані? Це здається дуже громіздким ...

Мене не цікавить будь-який сценарій / пакетна автоматизація, принаймні не зараз, я просто хочу простого редагування реєстру за допомогою команди cmd Reg. Без необхідності знищувати ключ, просто додати його на секунду пізніше з деякими додатковими даними. Таку ж операцію, яку ви можете зробити в Regedit.

Ось для вас приклад, який стимулює процес мислення.

Key: HKEY_CURRENT_USER\Software\Citrix\Receiver
Value type: reg_sz
Value name: UpgradeDone
Value data: true

Зараз це просто чудово, але що робити, якщо я повинен змінити ціннісні дані з "true" на "false". Так що я отримаю це замість:

Key: HKEY_CURRENT_USER\Software\Citrix\Receiver
Value type: reg_sz
Value name: UpgradeDone
Value data: false

Які варіанти та синтаксис для цього з cmd? ....

Оновлення:

Я щойно зрозумів, що приклад вище, можливо, був занадто простим ...

У наведеному вище прикладі я можу просто зробити наступне:

reg delete HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone

reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false

Я можу дозволити собі повністю видалити значення, а потім знову додати його, оскільки дані, що містяться в ньому, дуже малі. Це просто рядок на кшталт "true" або "false". Це не дуже важко для створення.

Ось більш складний приклад із більшим вмістом даних:

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Value name: Path
Value type: Reg_Sz
Data: C:\Program Files (x86)\ImageMagick-6.8.5-Q16;C:\PROGRA~2\GTK2-R~1\bin;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files (x86)\WinHasher";C:\Program Files (x86)\Android\android-sdk\tools\;C:\Program Files (x86)\Android\android-sdk\platform-tools\;C:\Program Files (x86)\GTK2-Runtime\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\Common Files\Teleca Shared;C:\Program Files (x86)\Notepad++

Я хочу видалити лише частини вмісту даних. Зокрема, я хочу лише видалити останній шлях пошуку, C: \ Program Files (x86) \ Notepad ++.

Як ти вирішуєш цю ?? ...

Ви не чекаєте, що я все це повторно введу ??


Ваше питання конкретно щодо редагування PATH з командного рядка чи будь-якого значення? Крім того, заміна або додавання / додавання до будь-якого значення reg є простим, але зміна / видалення частин значення вимагатиме більше зусиль.
Каран

Відповіді:


37

Використовуйте REG ADDпараметр "/ f", щоб примусити перезаписати.

REG ADD /? пояснює параметри.

REG ADD KeyName [/v ValueName | /ve] [/t type] [/s Separator] [/d Data] [/f]

KeyName     [\\Machine\]FullKey

Machine     Name of remote machine - omitting defaults to the current machine 
            Only HKLM and HKU are available on remote machines
FullKey     ROOTKEY\SubKey ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey 
            The full name of a registry key under the selected ROOTKEY
/v          The value name, under the selected Key, to add
/ve         adds an empty value name <no name> for the key
/t          RegKey data types
            [ REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN | REG_DWORD | 
              REG_BINARY | REG_DWORD_LITTLE_ENDIAN | REG_NONE | REG_EXPAND_SZ ]
            If omitted, REG_SZ is assumed
/s          Specify one character that you use as the separator in your data 
            string for REG_MULTI_SZ. If omitted, use "\0" as the separator
/d          The data to assign to the registry ValueName being added
/f          Force overwriting the existing registry entry without prompt

Щоб вставити нове значення або переключити значення рядка з "false" на "true", використовуйте команду на зразок цієї:

reg add HKCU\Software\Citrix\Receiver /t REG_SZ /v UpgradeDone /d true /f

Приклад, який читає наявне значення та додає деякий рядок перед тим, як записати його назад:

set append=XXXXXX
set key=HKCU\Software\myTest
set value=myValue
set oldVal=

for /F "skip=2 tokens=3" %%r in ('reg query %key% /v %value%') do set oldVal=%%r
echo previous=%oldVal%

set newVal=%oldVal%%append% 

reg add %key% /v %value% /d %newVal% /f

Примітка. Цей зразок передбачає, що старе значення та нове значення не мають пробілів. Інакше треба додати лапки і змінити параметр "жетони". Додаткова перевірка помилок пропущена для стислості. Однак увесь код, що маніпулює реєстром, безумовно, повинен робити адекватну перевірку помилок.


Отже ... примушування "перезаписати" насправді додає дані до імені значення? ... Це не замінює існуючі дані ?? ...
Самір

Отже, використовуючи мій другий приклад вище, ви говорите, що я можу зробити, reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /fщоб додати ;C:\Program Files (x86)\Some_softwareдо кінця рядка?
Самір

Ні, "REG / ADD" просто вставляє або перезаписує. Щоб додати, вам доведеться "REG / QUERY" значення, обчислити шукане значення і "REG / ADD" повернути його.
Аксель Кемпер

Так, це, мабуть, так і є. Я просто спробував це. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Значення UpgradeDone існує, перезаписати (Так / Ні)? Тож без перемикача / f він запитає, чи хочете ви перезаписати.
Самір

Чи можете ви пояснити, як додати дані до існуючого імені значення? Що ви маєте на увазі під «обчислити»?
Самір

2

Ви можете також , REG import foo.regв якому foo.regзнаходиться файл , що містить звичайну інформацію реєстру , як ви хочете експортувати з regedit.exe.

У вашому прикладі це буде щось на зразок:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"Path"="C:\Program Files (x86)\ImageMagick-6.8.5-Q16;C:\PROGRA~2\GTK2-R~1\bin;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files (x86)\WinHasher";C:\Program Files (x86)\Android\android-sdk\tools\;C:\Program Files (x86)\Android\android-sdk\platform-tools\;C:\Program Files (x86)\GTK2-Runtime\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\Common Files\Teleca Shared;C:\Program Files (x86)\Notepad++"

Більше інформації можна знайти в цій статті Microsoft Technet .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.