Как изменить данные существующего значения ключа реестра из cmd?


18

Как мне изменить существующее значение ключа реестра из 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

Я могу позволить себе полностью удалить значение, а затем добавить его снова, потому что содержащиеся в нем данные очень малы. Это просто строка типа «истина» или «ложь». Это не так сложно воссоздать.

Вот более сложный пример с большим количеством данных:

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 легко, но изменение / удаление частей значения потребует больше усилий.
Karan

Ответы:


34

использование 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

Замечания: В этом примере предполагается, что старое значение и новое значение не имеют пробелов. В противном случае нужно добавить кавычки и изменить параметр «токены». Дополнительная проверка ошибок опущена для краткости. Тем не мение, все Код, управляющий реестром, обязательно должен выполнять адекватную проверку ошибок.


Итак ... принудительное "перезапись" фактически добавляет данные к имени значения? ... Это не перезаписывает существующие данные ?? ...
Samir

Итак, используя мой второй пример выше, вы говорите, что я могу сделать 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 до конца строки?
Samir

Нет, "REG / ADD" просто вставляет или перезаписывает. Чтобы добавить, вам нужно будет «REG / QUERY» значение, вычислить требуемое значение и «REG / ADD» его обратно.
Axel Kemper

Да, похоже, это так. Я только что попробовал это. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Значение UpgradeDone существует, перезаписать (да / нет)? Поэтому без ключа / f он спросит вас, хотите ли вы перезаписать.
Samir

Можете ли вы объяснить, как добавить данные к имени существующего значения? Что вы подразумеваете под «вычислить»?
Samir

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.