90 votes

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

J'essaie de définir des variables d'environnement à l'aide de la fonction setx comme suit

setx PATH "f : \common outils \git\bin ;f : \common outils \python\app ;f : \common outils \python\app\<strkeep>scripts<strkeep> ;f : \common outils \ruby\bin ;f : \masm32\bin ; F:\Borland\BCC55\Bin ;%PATH%"

Cependant, je reçois l'erreur suivante si la valeur est supérieure à 1024 caractères :

AVERTISSEMENT : Les données enregistrées sont tronquées à 1024 caractères.

SUCCES : La valeur spécifiée a été enregistrée.

Mais certains des chemins à la fin ne sont pas sauvegardés dans la variable, je suppose que cela est dû à la limite de caractères comme le suggère l'erreur.

58voto

Ben Collins Points 11318

Votre meilleure chance est de modifier le registre directement.

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

Notez cependant que si vous pouvez saisir un chemin très long (jusqu'à la longueur maximale de la variable d'environnement ; 2,048 o 32,768 octets selon la source), tous les logiciels ne pourront pas le lire et le traiter correctement s'il est trop long.

36voto

Reza Points 672

Si vous utilisez Windows vista ou supérieur, vous pouvez faire un symbolic link dans le dossier. par exemple :

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

ferait un lien pour que c:\pf serait votre dossier de fichiers de programmes. J'ai supprimé 300 caractères de mon chemin d'accès en utilisant cette astuce.

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

27voto

tspauld Points 901

Vous pourriez utiliser un script PowerShell similaire à ce qui suit :

$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');

El Environment.SetEnvironmentVariable() L'appel API diffusera WM_SETTINGCHANGE donc vous n'avez pas besoin de redémarrer.

7voto

Kharlos Dominguez Points 255

Cet outil de ligne de commande open-source SetEnv 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 il rend la syntaxe parfois difficile si elle est utilisée avec d'autres variables locales par lots....

4voto

tspauld Points 901

Un outil bien supérieur à setx pour la manipulation des chemins est pathed.exe . Malheureusement, il est limité à la modification du chemin.

En plus d'une expérience utilisateur supérieure à celle de setx, vous n'êtes pas limité à 1024 caractères. Contrairement à la manipulation directe du registre, cette application utilise la fonction Environment.SetEnvironmentVariable() qui diffusera 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