Come posso modificare i dati di un nome valore chiave chiave di registro esistente da cmd?


19

Come posso modificare un valore di chiave di registro esistente da cmd?

Ci sono molte opzioni e interruttori, campane e fischietti, per il comando Reg. Sono disponibili opzioni per eseguire query, aggiungere ed eliminare chiavi, sottochiavi e nomi di valori. Ma come si modificano i dati di un nome valore esistente? Rimuovere completamente il nome del valore, quindi aggiungerlo di nuovo e digitare nuovamente il valore / i dati modificati? Sembra molto ingombrante ...

Non mi interessa l'automazione di script / batch, almeno non ora, voglio solo una semplice modifica del registro tramite il comando cmd Reg. Senza la necessità di distruggere una chiave solo per aggiungerla un secondo dopo con alcuni dati aggiuntivi. Lo stesso tipo di operazione che puoi eseguire in Regedit.

Ecco un esempio per stimolare il processo di pensiero.

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

Ora questo va bene, ma cosa succede se devo cambiare i dati del valore da "true" a "false". In modo che io ottenga questo invece:

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

Quali sono le opzioni e la sintassi per farlo da cmd? ....

Aggiornare:

Mi sono appena reso conto che l'esempio sopra potrebbe essere stato troppo semplice ...

Nell'esempio sopra posso solo fare quanto segue:

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

Posso permettermi di eliminare completamente il valore e quindi aggiungerlo di nuovo, poiché i dati contenuti al suo interno sono molto piccoli. È solo una stringa come "vero" o "falso". Non è troppo difficile da ricreare.

Ecco un esempio più difficile con più contenuto di dati:

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

Voglio rimuovere solo parti del contenuto dei dati. In particolare, desidero solo rimuovere l'ultimo percorso di ricerca, C: \ Programmi (x86) \ Notepad ++.

Come affronti questo ?? ...

Non ti aspetti che riscrivo tutto questo ?? ......


La tua domanda è specifica sulla modifica del PERCORSO dalla riga di comando o su qualsiasi valore? Inoltre, sostituire o aggiungere / anteporre a qualsiasi valore reg è semplice, ma la modifica / eliminazione di parti di un valore richiederà un impegno maggiore.
Karan,

Risposte:


37

Utilizzare REG ADDcon il parametro "/ f" per forzare la sovrascrittura.

REG ADD /? spiega i parametri.

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

Per inserire un nuovo valore o alternare un valore di stringa da "false" a "true", utilizzare un comando come questo:

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

Esempio che legge un valore esistente e aggiunge una stringa prima di riscriverlo:

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

Nota: questo esempio presuppone che il vecchio valore e il nuovo valore non abbiano spazi. In caso contrario, è necessario aggiungere virgolette e modificare il parametro "token". Controllo errori aggiuntivo omesso per brevità. Tuttavia, tutto il codice di manipolazione del registro deve assolutamente eseguire un controllo degli errori adeguato.


Quindi ... forzare una "sovrascrittura" aggiunge effettivamente i dati al nome del valore? ... Non sovrascrive i dati esistenti ?? ...
Samir,

Quindi, usando il mio secondo esempio sopra, stai dicendo che posso fare reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /fper aggiungere ;C:\Program Files (x86)\Some_softwarealla fine della stringa?
Samir,

No, "REG / ADD" inserisce o sovrascrive. Per aggiungere, dovresti "REG / QUERY" il valore, calcolare il valore desiderato e "REG / ADD" indietro.
Axel Kemper,

Sì, questo sembra essere il caso. Ho appena provato questo. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Aggiornamento valore Fatto, sovrascrivi (Sì / No)? Quindi senza l'opzione / f ti chiederà se vuoi sovrascrivere.
Samir,

Puoi spiegare come aggiungere dati a un nome valore esistente? Cosa intendi con "calcolo"?
Samir,

2

È inoltre possibile REG import foo.regin cui foo.regè un file contenente le solite informazioni del Registro di sistema da cui esportare regedit.exe.

Nel tuo esempio, questo sarebbe qualcosa del tipo:

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

Maggiori informazioni disponibili in questo articolo di Microsoft Technet .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.