Windows a la setx
commande:
Description:
Creates or modifies environment variables in the user or system
environment.
Vous pouvez donc définir une variable comme celle-ci:
setx FOOBAR 1
Et vous pouvez effacer la valeur comme ceci:
setx FOOBAR ""
Cependant, la variable n'est pas supprimée. Il reste dans le registre:
Alors, comment supprimeriez-vous réellement la variable?
windows
registry
environment-variables
Peter Mortensen
la source
la source
Réponses:
Pour supprimer la variable de l'environnement actuel ( pas de façon permanente):
Pour supprimer définitivement la variable de l' environnement utilisateur (qui est l'emplacement par défaut
setx
):Si la variable est définie dans l' environnement système (par exemple, si vous la définissez à l'origine avec
setx /M
), en tant qu'administrateur, exécutez:Remarque: les
REG
commandes ci-dessus n'affecteront aucun processus existant (et certains nouveaux processus issus de processus existants), donc s'il est important que le changement prenne effet immédiatement, la chose la plus simple et la plus sûre à faire est de vous déconnecter et de vous reconnecter ou redémarrer. Si ce n'est pas une option ou si vous souhaitez approfondir, certaines des autres réponses ici contiennent d'excellentes suggestions qui peuvent convenir à votre cas d'utilisation.la source
setx JUNK Hello
. Ouvrez un nouveau cmd. Tapezecho %JUNK%
et obtenezHello
. Ensuite, je le faisREG delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /F /V JUNK
et je confirme que la valeur a disparu du registre. J'ouvre un nouveau cmd et tapeecho %JUNK%
et je reçois toujoursHello
. La recherche dans le registre ne montre aucune présence de «JUNK». Ne me dites pas que vous avez besoin d'un redémarrage!user
commande d'environnement, cela réussit. Ensuite, lorsque je retaper la commande, je reçoisThe system was unable to find the specified registry or key value
. De plus, une recherche globaleJUNK
dans le registre avecregedit
ne donne rien. Pourtant, lorsque j'ouvre une nouvelle fenêtre de commande (via Démarrer / accessoires ou cmd.exe dans Exécuter) et que je tapeecho %JUNK%
, la valeur est toujours là!SET
liste pour le prochain shell cmd), puis le supprimer du registre, par exemple:SETX FOOBAR "" & REG delete HKCU\Environment /F /V FOOBAR
Pour supprimer la variable de la session de commande en cours sans la supprimer définitivement, utilisez la
set
commande intégrée standard - ne mettez rien après le signe égal:set FOOBAR=
Pour confirmer, exécutez
set
sans argument et vérifiez l'environnement actuel. La variable doit être entièrement absente de la liste.la source
Cela a été un peu couvert, mais il manque une information cruciale. J'espère que je pourrai vous aider à comprendre comment cela fonctionne et à soulager les voyageurs fatigués. :-)
Supprimer du processus actuel
De toute évidence, tout le monde sait que vous faites cela pour supprimer une variable d'environnement de votre processus actuel:
Suppression persistante
Il existe deux ensembles de variables d'environnement, à l'échelle du système et utilisateur.
Supprimer la variable d'environnement utilisateur:
Supprimer la variable d'environnement à l'échelle du système:
Appliquer la valeur sans redémarrer
Voici les informations magiques qui manquent! Vous vous demandez pourquoi après avoir fait cela, lorsque vous lancez une nouvelle fenêtre de commande, la variable d'environnement est toujours là. La raison en est que explorer.exe n'a pas mis à jour son environnement. Lorsqu'un processus en lance un autre, le nouveau processus hérite de l'environnement du processus qui l'a lancé.
Il existe deux façons de résoudre ce problème sans redémarrer. Le moyen le plus brutal est de tuer votre processus explorer.exe et de le redémarrer. Vous pouvez le faire à partir du Gestionnaire des tâches . Cependant, je ne recommande pas cette méthode.
L'autre façon est de dire à explorer.exe que l'environnement a changé et qu'il doit le relire. Cela se fait en diffusant un message Windows (WM_SETTINGCHANGE). Cela peut être accompli avec un simple script PowerShell. Vous pouvez facilement en écrire un pour ce faire, mais j'en ai trouvé un dans les paramètres de la fenêtre de mise à jour après les modifications scriptées :
Résumé
Donc, pour supprimer une variable d'environnement utilisateur nommée "FOO" et que le changement soit reflété dans les processus que vous lancez par la suite, procédez comme suit.
Notez que vous devrez probablement mettre à jour vos paramètres PowerShell pour vous permettre d'exécuter ce script, mais je laisserai cela comme un exercice Google-fu pour vous.
la source
source .bashrc
(ou ses cousins) dans Windows. Cela va au sommet de la ligne «refer-to-this» pour moi.À partir de PowerShell, vous pouvez utiliser la
[System.Environment]::SetEnvironmentVariable()
méthode .NET :Pour supprimer une variable d'environnement utilisateur nommée
FOO
:Notez que cela
$null
est utilisé pour mieux signaler l'intention de supprimer la variable, bien que techniquement, ce soit effectivement la même chose que la transmission''
dans ce cas.Pour supprimer une variable d'environnement système (au niveau de la machine) nommée
FOO
- nécessite une élévation (doit être exécutée en tant qu'administrateur):Outre une exécution plus rapide, l'avantage par rapport à la
reg.exe
méthode basée sur la base de données est que les autres applications sont notifiées du changement , via unWM_SETTINGCHANGE
message (bien que toutes les applications n'écoutent pas ce message).la source
Je suis d' accord avec CupawnTae .
SET
n'est pas utile pour les modifications apportées à l'environnement maître.FYI: les variables système sont en
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
(beaucoup plus longues que les variables utilisateur).La commande complète pour une variable système nommée FOOBAR est donc:
(Notez les guillemets nécessaires pour gérer l'espace.)
Il est dommage que la
setx
commande ne prenne pas en charge une syntaxe de suppression. :(PS: Utilisez de manière responsable - Si vous tuez votre variable de chemin, ne me blâmez pas!
la source
La commande dans la réponse de DougWare n'a pas fonctionné, mais ceci a fonctionné:
Le raccourci
HKLM
peut être utilisé pourHKEY_LOCAL_MACHINE
.la source
Supprimer sans redémarrer
La question de l'OP a en effet reçu une réponse approfondie, y compris comment éviter le redémarrage via PowerShell, vbscript ou vous le nommez.
Cependant, si vous devez vous en tenir uniquement aux commandes cmd et que vous n'avez pas le luxe de pouvoir appeler PowerShell ou vbscript, vous pouvez utiliser l'approche suivante:
Donc, la magie ici est qu'en utilisant "setx" pour assigner quelque chose à une variable dont vous n'avez pas besoin (dans mon exemple DUMMY), vous forcez Explorer.exe à relire les variables du registre, sans avoir besoin de PowerShell. Vous nettoyez ensuite ce mannequin, et même si celui-ci restera un peu plus longtemps dans l'environnement d'Explorateur, il ne fera probablement de mal à personne.
Ou si, après avoir supprimé des variables, vous devez en définir de nouvelles, vous n'avez même pas besoin de mannequin. Le simple fait d'utiliser SETX pour définir les nouvelles variables effacera automatiquement celles que vous venez de supprimer de toute nouvelle tâche cmd qui pourrait commencer.
Informations générales: Je viens d'utiliser cette approche avec succès pour remplacer un ensemble de variables utilisateur par des variables système du même nom sur tous les ordinateurs de mon travail, en modifiant un script cmd existant. Il y a trop d'ordinateurs pour le faire manuellement, et il n'était pas non plus pratique de copier des PowerShell ou des vbscripts supplémentaires sur chacun d'eux. La raison pour laquelle j'avais un besoin urgent de remplacer l'utilisateur par des variables système était que les variables utilisateur étaient synchronisées dans des profils itinérants (je n'y pensais pas), donc plusieurs machines utilisant le même identifiant Windows mais nécessitant des valeurs différentes, se sont mélangées.
la source
fait simplement que la valeur de FOOBAR est une chaîne nulle. (Bien que cela s'affiche avec la
set
commande avec le "", alors peut-être que des guillemets sont la chaîne.)J'ai utilisé:
puis FOOBAR n'était plus répertorié dans la commande set. (La déconnexion n'était pas nécessaire.)
Windows 7 32 bits, en utilisant l'invite de commande, non-administrateur est ce que j'ai utilisé. (Pas cmd ou Windows+ R, ce qui peut être différent.)
BTW, je n'ai vu la variable que j'ai créée nulle part dans le registre après l'avoir créée. J'utilise RegEdit pas en tant qu'administrateur.
la source
Vous pouvez également créer un petit script VBScript :
Alors appelez-le comme
%windir%\System32\cscript.exe //Nologo "script_name.vbs" FOOBAR
.L'inconvénient est que vous avez besoin d'un script supplémentaire, mais il ne nécessite pas de redémarrage.
la source