47 votes

Comment la persistance de définir une variable dans Windows 7 à partir d'un fichier batch?

Je suis en train de mettre la variable d'environnement PATH de windows 7 à l'aide d'une batte de fichier; toutefois, il ne semble pas fonctionner.

Je suis à l'aide de cette commande windows:

set PATH=%cd%;%path%
pause

Cependant il ne semble valable pour cette cmd instance. Je veux qu'il soit permanent, puisque j'ai d'abord définir le CHEMIN d'accès, puis exécutez un programme qui doit localiser les bibliothèques dans ce dossier.

66voto

Ryan Bemrose Points 1025

Utilisation setx.exe au lieu de set.

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

Notez que ceci définit le chemin d'accès pour tous les futurs cmd cas, mais pas pour celle en cours. Si vous avez besoin, également exécuter l'original de votre commande set.

Mise à JOUR: Le deuxième paramètre doit être indiqué s'il contient des espaces (qui %path% a toujours). Être averti que si le dernier caractère de votre %path% est une barre oblique inverse, il va échapper à la fuite des devis et la dernière entrée du chemin s'arrête de fonctionner. Je me déplace qu'en ajoutant un point-virgule avant le guillemet de fermeture.

Si vous ne voulez pas prendre le risque de se ";;;;;;" à la fin de votre chemin après de multiples pistes, alors au lieu de supprimer toutes les barre oblique inverse à partir de la variable %path% avant de la définir, et qu'il fonctionne correctement.

22voto

simon Points 406

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

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.

18voto

DenNukem Points 3455

Comme wizlb noté, en faisant

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

copie locale env système env, et sans m il copie du système d'env pour l'utilisateur env. Il n'est ni souhaitable. Pour être en mesure de modifier une seule partie de la base de registre (système ou utilisateur, système dans mon exemple ci-dessous) vous devez faire ceci:

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

Crédit pour la solution va à l' http://www.robvanderwoude.com/ntregistry.php

12voto

David Heffernan Points 292687

Pour ce faire correctement, je pense que vous avez vraiment besoin pour aller au-delà d'un simple fichier de commandes. La documentation MSDN états:

Ajouter par programmation ou de modifier les variables d'environnement système, les ajouter à la clé de registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment clé de registre, puis diffuser WM_SETTINGCHANGE message avec lParam ensemble de la chaîne de "l'Environnement". Cela permet aux applications, telles que la coquille, pour ramasser vos mises à jour.

Tout d'abord, vous ne serez pas en mesure d'écrire à cette clé sans un contrôle de compte d'utilisateur de l'invite d'élévation. C'est mieux organisées par l'ajout du manifeste approprié à un fichier exécutable. Deuxièmement, la radiodiffusion WM_SETTINGCHANGE n'est pas simple à partir d'un fichier de commandes.

Dans votre position, je voudrais écrire une courte et simple application console pour faire le travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X