Как изменить данные существующего значения ключа реестра из 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 ++.

Как вы справляетесь с этим ?? ...

Вы не ожидаете, что я перепечатал все это ?? ......

Samir
источник
Ваш вопрос конкретно о редактировании 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

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

Axel Kemper
источник
Итак ... принудительное "перезапись" фактически добавляет данные к имени значения? ... Это не перезаписывает существующие данные ?? ...
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 ,

Andre Terra
источник