Comment modifier les données d'un nom de valeur de clé de registre existant à partir de cmd?


19

Comment modifier une valeur de clé de registre existante à partir de cmd?

Il y a beaucoup d'options et de commutateurs, de cloches et de sifflets, pour la commande Reg. Il existe des options pour interroger, ajouter et supprimer des clés, des sous-clés et des noms de valeur. Mais comment modifiez-vous les données d'un nom de valeur existant? Supprimez-vous complètement le nom de la valeur, puis ajoutez-le à nouveau et retapez la valeur / les données modifiées? Cela semble très lourd ...

Je ne suis pas intéressé par une automatisation de script / batch, du moins pas maintenant, je veux juste une simple modification du registre via la commande cmd Reg. Sans avoir besoin de détruire une clé juste pour l'ajouter une seconde plus tard avec quelques données supplémentaires. Le même type d'opération que vous pouvez faire dans Regedit.

Voici un exemple pour stimuler le processus de réflexion.

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

Maintenant, celui-ci est très bien, mais que faire si je dois changer les données de valeur de "vrai" à "faux". Pour que j'obtienne ceci à la place:

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

Quelles sont les options et la syntaxe pour le faire à partir de cmd? ....

Mise à jour:

Je viens de réaliser maintenant que l'exemple ci-dessus aurait peut-être été trop facile ...

Dans l'exemple ci-dessus, je peux simplement faire ce qui suit:

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

Je peux me permettre de supprimer complètement la valeur, puis de l'ajouter à nouveau, car les données qu'elle contient sont très petites. C'est juste une chaîne comme "true" ou "false". Ce n'est pas trop difficile à recréer.

Voici un exemple plus difficile avec plus de contenu de données:

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

Je souhaite supprimer uniquement des parties du contenu des données. Plus précisément, je souhaite uniquement supprimer le dernier chemin de recherche, le C: \ Program Files (x86) \ Notepad ++.

Comment abordez-vous celui-ci ?? ...

Vous ne vous attendez pas à ce que je retape tout cela ?? ......


Votre question concerne-t-elle spécifiquement la modification de PATH à partir de la ligne de commande, ou toute autre valeur? De plus, le remplacement ou l'ajout / l'ajout à n'importe quelle valeur de reg est facile, mais la modification / suppression de parties d'une valeur nécessitera plus d'efforts.
Karan

Réponses:


37

À utiliser REG ADDavec le paramètre "/ f" pour forcer l'écrasement.

REG ADD /? explique les paramètres.

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

Pour insérer une nouvelle valeur ou basculer une valeur de chaîne de "false" à "true", utilisez une commande comme celle-ci:

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

Exemple qui lit une valeur existante et ajoute une chaîne avant de la réécrire:

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

Remarque: Cet exemple suppose que l'ancienne valeur et la nouvelle valeur n'ont pas de blancs. Sinon, il faut ajouter des guillemets et changer le paramètre "tokens". Vérification d'erreur supplémentaire omise par souci de concision. Cependant, tout code manipulant le registre doit absolument faire une vérification d'erreur adéquate.


Donc ... forcer un "écraser" ajoute en fait des données au nom de la valeur? ... Il n'écrase pas les données existantes ?? ...
Samir

Donc, en utilisant mon deuxième exemple ci-dessus, vous dites que je peux faire reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /fpour ajouter ;C:\Program Files (x86)\Some_softwareà la fin de la chaîne?
Samir

Non, "REG / ADD" insère ou remplace simplement. Pour ajouter, vous devez "REG / QUERY" la valeur, calculer la valeur souhaitée et "REG / ADD" en arrière.
Axel Kemper

Oui, cela semble être le cas. Je viens d'essayer ça. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Mise à niveau de la valeur Terminé existe, écraser (Oui / Non)? Ainsi, sans le commutateur / f, il vous demandera si vous souhaitez remplacer.
Samir

Pouvez-vous expliquer comment ajouter des données à un nom de valeur existant? Qu'entendez-vous par «calculer»?
Samir

2

Vous pouvez également REG import foo.regdans lequel se foo.regtrouve un fichier contenant les informations de registre habituelles à partir desquelles vous exporteriez regedit.exe.

Dans votre exemple, ce serait quelque chose comme:

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

Plus d'informations disponibles dans cet article Microsoft Technet .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.