web-dev-qa-db-fra.com

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

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

Il y a beaucoup d'options et de commutateurs, cloches et 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 modifier les données d'un nom de valeur existant? Supprimez-vous complètement le nom de la valeur, puis ajoutez-le à nouveau et ressaisissez la valeur/les données modifiées? Cela semble très encombrant ...

Je ne suis intéressé par aucune automatisation de script/batch, du moins pas maintenant, je veux juste une simple et simple édition du registre via la commande cmd Reg. Sans la nécessité de détruire une clé, il suffit de l'ajouter une seconde plus tard avec des données supplémentaires. Le même genre 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 si je devais changer les données de valeur de "true" à "false". Pour que je reçoive 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 me rendre compte maintenant que l'exemple ci-dessus était peut-être 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 "vrai" ou "faux". 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, C:\Program Files (x86)\Notepad ++.

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

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

19
Samir

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 l'é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 "jetons". Vérification d'erreur supplémentaire omise par souci de concision. Cependant, all le code manipulant le registre doit impérativement vérifier correctement les erreurs.

36
Axel Kemper

Vous pouvez également REG import foo.reg dans lequel foo.reg est un fichier contenant les informations de registre habituelles, telles que vous les exporteriez depuis regedit.exe.

Dans votre exemple, cela ressemblerait à 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 sur cet article Microsoft Technet .

2
Andy Terra