Wie ändere ich die Daten eines vorhandenen Registrierungsschlüsselwertnamens von cmd?

19

Wie ändere ich einen vorhandenen Registrierungsschlüsselwert von cmd?

Es gibt viele Optionen und Schalter, Schnickschnack, für den Befehl Reg. Es gibt Optionen zum Abfragen, Hinzufügen und Löschen von Schlüsseln, Unterschlüsseln und Wertnamen. Aber wie ändern Sie die Daten eines vorhandenen Wertnamens? Entfernen Sie den Wertnamen vollständig und fügen Sie ihn dann erneut hinzu und geben Sie den geänderten Wert / die geänderten Daten erneut ein? Das scheint sehr umständlich ...

Ich bin an keiner Skript- / Stapelautomatisierung interessiert, zumindest nicht jetzt. Ich möchte nur eine einfache Bearbeitung der Registrierung über den Befehl cmd Reg. Ohne dass Sie einen Schlüssel zerstören müssen, um ihn eine Sekunde später mit einigen zusätzlichen Daten hinzuzufügen. Die gleiche Art von Operation, die Sie in Regedit ausführen können.

Hier ist ein Beispiel, mit dem Sie den Denkprozess vorantreiben können.

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

Jetzt ist dies in Ordnung, aber was ist, wenn ich die Wertedaten von "true" auf "false" ändern muss. Damit ich das stattdessen bekomme:

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

Was sind die Optionen und die Syntax, um das von cmd aus zu tun? ....

Aktualisieren:

Mir ist gerade klar geworden, dass das obige Beispiel einfach zu einfach gewesen sein könnte ...

Im obigen Beispiel kann ich einfach Folgendes tun:

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

Ich kann es mir leisten, den Wert vollständig zu löschen und ihn dann erneut hinzuzufügen, da die darin enthaltenen Daten sehr klein sind. Es ist nur eine Zeichenfolge wie "wahr" oder "falsch". Das ist nicht allzu schwer nachzubauen.

Hier ist ein schwierigeres Beispiel mit mehr Dateninhalt:

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

Ich möchte nur Teile des Dateninhalts entfernen. Insbesondere möchte ich nur den letzten Suchpfad, C: \ Programme (x86) \ Notepad ++, entfernen.

Wie packst du das an ?? ...

Du erwartest nicht, dass ich das alles noch einmal tippe ?? ......

Samir
quelle
Haben Sie eine spezielle Frage zum Bearbeiten von PATH über die Befehlszeile oder einen Wert? Auch das Ersetzen oder Anhängen / Voranstellen eines beliebigen Registrierungswerts ist einfach, das Ändern / Löschen von Teilen eines Werts erfordert jedoch mehr Aufwand.
Karan

Antworten:

37

Verwenden Sie REG ADDmit dem Parameter "/ f", um das Überschreiben zu erzwingen.

REG ADD /? erklärt die Parameter.

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

Verwenden Sie einen Befehl wie den folgenden, um einen neuen Wert einzufügen oder einen Zeichenfolgenwert von "false" in "true" umzuschalten:

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

Beispiel, das einen vorhandenen Wert liest und einen String anfügt, bevor er zurückgeschrieben wird:

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

Hinweis: In diesem Beispiel wird davon ausgegangen, dass der alte und der neue Wert keine Leerzeichen enthalten. Andernfalls muss man Anführungszeichen hinzufügen und den Parameter "Token" ändern. Zusätzliche Fehlerprüfung aus Gründen der Kürze weggelassen. Doch alle Code - Registry Manipulieren definitiv muss Prüfung ausreichend Fehler machen.

Axel Kemper
quelle
Also ... beim Erzwingen eines "Überschreibens" werden tatsächlich Daten an den Wertnamen angehängt? ... werden die vorhandenen Daten nicht überschrieben? ...
Samir
Anhand meines zweiten obigen Beispiels sagen Sie also, dass ich tun kann reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /f, um ;C:\Program Files (x86)\Some_softwarean das Ende der Zeichenfolge anzuhängen ?
Samir
Nein, "REG / ADD" fügt nur ein oder überschreibt es. Zum Anhängen müssten Sie den Wert "REG / QUERY", den gewünschten Wert berechnen und "REG / ADD" zurückgeben.
Axel Kemper
Ja, das scheint der Fall zu sein. Ich habe es gerade versucht. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Wert Upgrade vorhanden, überschreiben (Ja / Nein)? Ohne die Option / f werden Sie gefragt, ob Sie überschreiben möchten.
Samir
Können Sie erklären, wie Daten an einen vorhandenen Wertnamen angehängt werden? Was meinst du mit "rechnen"?
Samir
2

Sie können auch REG import foo.regin dem foo.regwird , das eine Datei , die die üblichen Registrierungsinformationen , wie Sie aus exportieren würden regedit.exe.

In Ihrem Beispiel wäre dies so etwas wie:

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

Weitere Informationen finden Sie in diesem Microsoft Technet-Artikel .

Andy Terra
quelle