90 votes

Dépasser la limite de 1024 caractères avec setx

Je tente de définir des variables d'environnement en utilisant la commande setx, comme suit

setx PATH "f:\common tools\git\bin;f:\common tools\python\app;f:\common tools\python\app\scripts;f:\common tools\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 enregistrées sont tronquées à 1024 caractères.

SUCCÈS : La valeur spécifiée a été enregistrée.

Mais certaines des chemins à la fin ne sont pas enregistrés dans la variable, probablement en raison de la limite de caractères comme l'indique l'erreur.

58voto

Ben Collins Points 11318

Votre meilleur pari est de modifier directement le registre.

Naviguez jusqu'à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment et modifiez la valeur Path (puis redémarrez pour activer la nouvelle valeur).

Notez cependant que bien que vous puissiez entrer un chemin très long, (jusqu'à la longueur maximale de la variable d'environnement; 2,048 ou 32,768 octets selon la source), tous les logiciels ne pourront pas le lire et le gérer correctement s'il est trop long.

36voto

Reza Points 672

Si vous utilisez Windows Vista ou une version supérieure, vous pouvez créer un lien symbolique vers le dossier. par exemple:

mklink /d C:\pf "C:\Program Files"
mklink /d C:\pf86 "C:\Program Files (x86)"

ferait un lien donc c:\pf serait votre dossier Program Files. J'ai enlevé 300 caractères de mon chemin en utilisant ce truc.

(Je sais que ce n'est pas lié à setx mais c'est utile pour les personnes qui cherchent à dépasser la limite de 1024 caractères)

27voto

tspauld Points 901

Vous pourriez utiliser un script PowerShell similaire au suivant:

$newPath = 'F:\common tools\git\bin;F:\common tools\python\app;F:\common tools\python\app\scripts;F:\common tools\ruby\bin;F:\masm32\bin;F:\Borland\BCC55\Bin'
$oldPath = [Environment]::GetEnvironmentVariable('PATH', 'Machine');
[Environment]::SetEnvironmentVariable('PATH', "$newPath;$oldPath",'Machine');

La Environment.SetEnvironmentVariable() appel API va diffuser WM_SETTINGCHANGE donc vous n'avez pas besoin de redémarrer.

7voto

Kharlos Dominguez Points 255

Cet outil en ligne de commande SetEnv open-source est bon pour éditer le PATH et d'autres variables d'environnement sans limitations. Il utilise un tampon dynamique donc pas de limitations statiques comme 1024.

http://www.codeproject.com/Articles/12153/SetEnv

Le choix d'un % comme préfixe à ajouter à une variable aurait pu être meilleur cependant, car cela rend parfois la syntaxe difficile si utilisée avec d'autres variables locales batch...

4voto

tspauld Points 901

Un outil bien supérieur que setx pour la manipulation des chemins d'accès est pathed.exe. Malheureusement, il est limité à l'édition du chemin d'accès.

En plus d'offrir une expérience utilisateur supérieure à setx, il n'y a pas de limite de 1024 caractères. Contrairement à la manipulation directe du registre, cette application utilise l'appel API Environment.SetEnvironmentVariable() qui enverra WM_SETTINGCHANGE.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X