Jak zmodyfikować dane istniejącej nazwy wartości klucza rejestru z cmd?

19

Jak zmodyfikować istniejącą wartość klucza rejestru z cmd?

Istnieje wiele opcji i przełączników, dzwonków i gwizdków dla polecenia Reg. Dostępne są opcje zapytań, dodawania i usuwania kluczy, podkluczy i nazw wartości. Ale jak zmodyfikować dane istniejącej nazwy wartości? Czy całkowicie usuwasz nazwę wartości, a następnie dodajesz ją ponownie i ponownie wpisujesz zmodyfikowaną wartość / dane? To wydaje się bardzo kłopotliwe ...

Nie interesuje mnie żadna automatyzacja skryptów / partii, przynajmniej nie teraz, chcę po prostu prostej edycji rejestru za pomocą polecenia cmd Reg. Bez konieczności niszczenia klucza, aby dodać go sekundę później z dodatkowymi danymi. Ten sam rodzaj operacji, który możesz wykonać w Regedit.

Oto przykład, który pobudzi proces myślenia.

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

Teraz jest w porządku, ale co jeśli będę musiał zmienić dane wartości z „prawda” na „fałsz”. Zamiast tego otrzymuję to:

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

Jakie są opcje i składnia, aby to zrobić z cmd? ....

Aktualizacja:

Właśnie zdałem sobie sprawę, że powyższy przykład mógł być po prostu zbyt łatwy ...

W powyższym przykładzie mogę po prostu wykonać następujące czynności:

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

Mogę sobie pozwolić na całkowite usunięcie wartości, a następnie dodanie jej ponownie, ponieważ zawarte w niej dane są bardzo małe. To tylko ciąg znaków „prawda” lub „fałsz”. Nie jest to zbyt trudne do odtworzenia.

Oto trudniejszy przykład z większą zawartością danych:

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++

Chcę usunąć tylko części treści danych. W szczególności chcę tylko usunąć ostatnią ścieżkę wyszukiwania, C: \ Program Files (x86) \ Notepad ++.

Jak sobie z tym poradzić ?? ...

Nie oczekujesz, że powtórzę to wszystko ?? ......

Samir
źródło
Czy Twoje pytanie dotyczy konkretnie edycji ŚCIEŻKI z wiersza poleceń lub jakiejkolwiek wartości? Również zamiana lub dołączanie / dodawanie do dowolnej wartości reg jest łatwe, ale modyfikowanie / usuwanie części wartości będzie wymagało więcej wysiłku.
Karan

Odpowiedzi:

36

Użyj REG ADDz parametrem „/ f”, aby wymusić zastąpienie.

REG ADD /? wyjaśnia parametry.

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

Aby wstawić nową wartość lub przełączyć wartość ciągu z „false” na „true”, użyj następującego polecenia:

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

Przykład, który odczytuje istniejącą wartość i dołącza ciąg przed zapisaniem go:

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

Uwaga: W tej próbce założono, że stara wartość i nowa wartość nie mają spacji. W przeciwnym razie należy dodać cudzysłowy i zmienić parametr „tokeny”. Dodatkowe sprawdzanie błędów pominięto dla zwięzłości. Jednak cały kod manipulujący rejestrem z pewnością musi wykonać odpowiednie sprawdzenie błędów.

Axel Kemper
źródło
Więc ... wymuszenie „nadpisania” faktycznie dodaje dane do nazwy wartości? ... Nie zastępuje istniejących danych? ...
Samir
Tak więc, używając mojego drugiego przykładu powyżej, mówisz, że mogę zrobić, reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /faby dołączyć ;C:\Program Files (x86)\Some_softwarena końcu ciągu?
Samir
Nie, „REG / ADD” po prostu wstawia lub zastępuje. Aby dołączyć, musisz „REG / QUERY” wartość, obliczyć żądaną wartość i „REG / ADD” z powrotem.
Axel Kemper
Tak, wydaje się, że tak jest. Właśnie tego spróbowałem. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Uaktualnienie wartości Czy istnieje, nadpisać (Tak / Nie)? Więc bez przełącznika / f zapyta cię, czy chcesz zastąpić.
Samir
Czy możesz wyjaśnić, jak dołączyć dane do istniejącej nazwy wartości? Co rozumiesz przez „obliczanie”?
Samir
2

Możesz również REG import foo.regw którym foo.regznajduje się plik zawierający zwykłe informacje rejestru, z których eksportowałeś regedit.exe.

W twoim przykładzie byłoby to coś takiego:

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++"

Więcej informacji jest dostępnych w tym artykule Microsoft Technet .

Andy Terra
źródło