Comment modifier les données d'une valeur de clé de registre existante depuis cmd ?

Comment modifier une valeur de clé de registre existante depuis cmd ?

Il existe beaucoup d’options et de commutateurs, de fioritures, pour la commande Reg. Il y a des options pour interroger, ajouter et supprimer des clés, sous-clés et noms de valeurs. Mais comment modifier les données d’un nom de valeur existant ? Faut-il complètement supprimer le nom de valeur, puis l’ajouter à nouveau et retaper les données modifiées ? Cela semble très fastidieux…

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

Voici un exemple pour stimuler la 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 la valeur de “true” à “false”. Pour obtenir 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 faire cela depuis cmd ?..

Mise à jour :

Je viens de réaliser que l’exemple ci-dessus était peut-être trop facile…

Dans l’exemple ci-dessus, je peux simplement faire :

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 veux supprimer seulement des parties du contenu des données. Plus précisément, je veux seulement supprimer le dernier chemin de recherche, le C:\Program Files (x86)\Notepad++.

Comment aborder celui-ci ??..

Vous ne vous attendez quand même pas à ce que je retape tout cela ??..

Utilisez REG ADD avec 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 d’espaces. Sinon, il faut ajouter des guillemets et changer le paramètre “tokens”. La vérification d’erreur supplémentaire est omise par souci de concision. Cependant, tout code manipulant le registre doit absolument effectuer une vérification d’erreur adéquate.