web-dev-qa-db-fra.com

Comment définir de manière persistante une variable dans Windows 7 à partir d'un fichier de commandes?

J'essaie de définir la variable d'environnement PATH dans Windows 7 en utilisant un fichier bat; mais cela ne semble pas fonctionner.

J'utilise cette commande Windows:

set PATH=%cd%;%path%
pause

Cependant, il ne semble être valide que pour cette instance cmd. Je veux que ce soit permanent, car j'ai d'abord défini le PATH puis exécuté un programme qui doit localiser les bibliothèques dans ce dossier.

46
KaiserJohaan

Utilisez setx.exe au lieu de set.

setx PATH "%cd%;%path%;"
pause

Notez que cela définit le chemin d'accès pour toutes les futures instances de cmd, mais pas pour l'instance actuelle. Si vous en avez besoin, exécutez également votre commande set d'origine.

MISE À JOUR: Le deuxième paramètre doit être cité s'il contient des espaces (que% path% a toujours). Soyez averti que si le dernier caractère de votre% path% est une barre oblique inverse, il échappera à la citation de fin et la dernière entrée de chemin cessera de fonctionner. Je contourne cela en ajoutant un point-virgule avant la citation de clôture.

Si vous ne voulez pas risquer d'obtenir ";;;;;;" à la fin de votre chemin après des exécutions répétées, puis supprimez à la place toute barre oblique inverse de fin de la variable% path% avant de définir, et cela fonctionnera correctement.

65
Ryan Bemrose

Si vous souhaitez le faire dans un fichier de commandes, utilisez la commande reg pour modifier la valeur du chemin d'accès dans le Registre à la clé HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Quelque chose comme:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath"

Vérifiez que le chemin d'accès dans la variable% path% correspond au chemin d'accès système.

22
simon

Comme l'a noté wizlb, faire

setx PATH "%cd%;%path%;" -m

copiera env local vers system env, et sans -m il copiera system env vers user env. Ni l'un ni l'autre n'est souhaitable. Afin de modifier avec précision une seule partie du registre (système ou utilisateur, système dans mon exemple ci-dessous), vous devez procéder comme suit:

for /F "tokens=2* delims= " %%f IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx.exe PATH "%OLD_SYSTEM_PATH%;%OTHER_STUFF%;" -m

Le crédit pour la solution va à http://www.robvanderwoude.com/ntregistry.php

17
DenNukem

Pour le faire correctement, je pense que vous devez vraiment aller au-delà d'un simple fichier batch. --- documentation MSDN indique:

Pour ajouter ou modifier par programme des variables d'environnement système, ajoutez-les à la clé de registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment , puis diffusez une - WM_SETTINGCHANGE message avec lParam défini sur la chaîne "Environnement". Cela permet aux applications, telles que Shell, de récupérer vos mises à jour.

Tout d'abord, vous ne pourrez pas écrire sur cette clé sans invite d'élévation UAC. La meilleure solution consiste à ajouter le manifeste approprié à un fichier exécutable. Deuxièmement, la radiodiffusion WM_SETTINGCHANGE n'est pas simple à partir d'un fichier batch.

À votre place, j'écrirais une application console courte et simple pour faire le travail.

12
David Heffernan

Une solution simple (peut-être meilleure) consiste à utiliser PathMgr.cmd

Dans le chemin d'accèsmgr_1.0.2.Zip in https://gallery.technet.Microsoft.com/Batch-Script-To-Manage-7d0ef21e

Décompressez et placez le pathmgr.cmd dans le même dossier que votre fichier de commandes, puis dans votre fichier de commandes, écrivez ces deux lignes:

call pathmgr.cmd /del %cd% /y
call pathmgr.cmd /add %cd% /y

Cette volonté:

1) seulement mettre à jour la variable utilisateur PATH, 2) n'inclura pas le système PATH plusieurs fois

Vous pouvez également exécuter le fichier de commandes plusieurs fois, et il n'inclura votre chemin actuel UNE FOIS dans le CHEMIN.

4
Changwang Zhang

En supposant que je souhaite créer une variable d'environnement système appelée "Zip_PROGRAM" et que je souhaite la pointer vers l'exécutable sur le chemin "reg add C:\Program Files\7-Zip\7z.exe

Je vais effectuer ce qui suit à l'invite DOS:

Étape 1: exécutez le code suivant reg ajoutez "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"/v Zip_PROGRAM/t REG_SZ/d "C:\Program Files\7-Zip\7z.exe"/f

Étape 2: Déconnexion puis connexion

Étape 3: Ouvrez l'invite DOS et exécutez: "set z" et vous devriez pouvoir voir la mise à jour de la variable d'environnement système

0
Paul Mai

Utilisez cette commande setx PATH "% PATH%;% MVN_HOME%\bin \"

Quoi qu'il en soit, il ne sera pas défini dans la session en cours, vous devez utiliser

définir PATH = "% PATH%;% MVN_HOME%\bin \"

0
Santosh b