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 ?? ......


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.


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.