J'essaie de définir des variables d'environnement à l'aide de la setx
commande, comme suit
setx PATH "f: \ outils communs \ git \ bin; f: \ outils communs \ python \ app; f: \ outils communs \ python \ app \ scripts; f: \ outils communs \ ruby \ bin; f: \ masm32 \ bin; F: \ Borland \ BCC55 \ Bin;% PATH% "
Cependant, j'obtiens l'erreur suivante si la valeur est supérieure à 1024 caractères:
AVERTISSEMENT: les données en cours d'enregistrement sont tronquées à 1024 caractères.
SUCCESS: La valeur spécifiée a été enregistrée.
Mais certains des chemins à la fin ne sont pas enregistrés dans la variable, je suppose en raison de la limite de caractères comme le suggère l'erreur.
windows-7
environment-variables
windows-server-2008-r2
Madhur Ahuja
la source
la source
%PATH%
Réponses:
Votre meilleur pari est d’éditer directement le registre.
Accédez à
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
laPath
valeur et modifiez-la (puis redémarrez pour activer la nouvelle valeur).Notez cependant que, même si vous pouvez entrer un très long chemin (jusqu’à la longueur maximale de la variable d’environnement; 2 048 ou 32 768 octets, en fonction de la source), tous les logiciels ne pourront pas le lire et le manipuler correctement s’il est trop long.
la source
setx
édite le registre comme je l'ai indiqué, puis diffuse unWM_SETTINGCHANGE
message. Cela indique à toutes les fenêtres de niveau supérieur qu'un paramètre système a été modifié (dans ce cas, une variable d'environnement). Sans cela, Explorer et les programmes avec lesquels vous avez ouvert ne seront pas informés de la modification. Vous pouvez diffuser le message vous-même manuellement (j'ai écrit un programme dans ce but, et un fichier de commandes à remplacerSETX
qui crée une édition du registre suivie de la diffusion), mais, tout commesetx
la boîte de dialogue Envvar des propriétés système, elle a des effets secondaires qui rendre le redémarrage préférable.:-|
Si vous utilisez Windows Vista ou supérieur, vous pouvez créer un
symbolic link
dans le dossier. par exemple:ferait un lien ainsi
c:\pf
serait votre dossier de fichiers de programme. J'ai rasé 300 caractères de mon chemin en utilisant cette astuce.(Je sais que ce n'est pas lié à setx mais c'est utile pour les personnes qui cherchent trop avec une limite de 1024 caractères)
la source
Vous pouvez utiliser un script PowerShell similaire à celui-ci:
L' appel de l'API Environment.SetEnvironmentVariable () sera diffusé
WM_SETTINGCHANGE
afin que vous n'ayez pas besoin de redémarrer.la source
[Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')
?@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
Cet outil de ligne de commande open-source SetEnv permet de modifier le chemin PATH et les autres variables d'environnement sans limitation. Il utilise un tampon dynamique, donc pas de limitations statiques comme 1024.
http://www.codeproject.com/Articles/12153/SetEnv
Le choix d'un% en tant que préfixe à ajouter à une variable aurait pu être meilleur, car il rend parfois la syntaxe difficile s'il est utilisé avec d'autres variables locales par lots ...
la source
Un outil bien supérieur que setx pour la manipulation de chemin est pathed.exe . Malheureusement, cela se limite à l'édition du chemin.
Outre une expérience utilisateur supérieure à celle de setx, vous n'avez pas de limite de 1024 caractères. Contrairement à la manipulation directe du registre, cette application utilise l'appel de l' API Environment.SetEnvironmentVariable () qui sera diffusé
WM_SETTINGCHANGE
.la source
Ma méthode préférée consiste à modifier les noms de dossier dans les variables PATH pour utiliser les noms 8.3. Cette réponse StackOverflow a un script génial (exécuté à partir d'un fichier .bat) qui générera la version "réduite" de la variable PATH entière, que vous pourrez ensuite coller dans la ou les boîtes de dialogue Editer la variable. Le seul inconvénient est que vous devrez séparer les parties SYSTEM et USER. Au fur et à mesure que le script parcourt la version détaillée de chaque dossier, il le supprime et vous avertit des chemins non valides / non existants. Bon petit bonus de nettoyage.
la source
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
APRES à l'aide du script causerait certainement des problèmes pour les dossiers affectés.fsutil 8dot3name strip
plus tôt aujourd'hui et considérant (a) qu'il vérifie d'abord le registre et (b) le chemin est stocké dans le registre, ma préoccupation antérieure peut être injustifiée, tant que l'utilisateur n'utilise pas l'/f
option (force) .Vous pouvez mettre cette ligne dans votre BAT:
Voir le double
%%
.(Référence: https://support.microsoft.com/en-us/kb/75634 )
la source
%path%;c:\...[snip]...\7z
dans lapath
variable utilisateur , en laissant tomber tout ce que vous aviez là.%path%
dans la variable d'environnement de chemin local ne devrait avoir aucun effet.s'il n'est pas nécessaire de garder le système PATH et l'utilisateur PATH séparés:
la source
Je pense que le meilleur moyen est le suivant (avec powershell). De cette manière, vous évitez également le caractère unique de 1024 caractères.
Vous pouvez voir le code sur: https://gist.github.com/drazul/b92f780689bd89a0d2a7
la source