115 votes

Comment éviter de remplir plus Variable d’environnement PATH sous Windows

Je voudrais savoir quelles sont les approches que vous utilisez pour gérer les fichiers exécutables dans votre système. Par exemple, j'ai presque tout accessible par la ligne de commande, mais j'en viens maintenant à la limite de la chaîne de chemin, donc je ne peux pas ajouter plus de dir.

Donc, ce que vous recommande? Il y A longtemps que j'essaie d'utiliser softLinks des exécutables dans un Dir qui appartiennent à la voie, mais cette approche n'a pas fonctionné. Jeter le "exécutable seulement" à un Dir,a les problèmes que presque toutes les applications ont besoin d'un ensemble de fichiers, de sorte que c'est également mauvais. Lancer l'exécutable et tous ses fichiers à un Dir, mmm cela va fonctionner, mais la possibilité d'un conflit dans le nom des fichiers est très très élevé. Créer un HardLink? je ne sais pas. Qu'en pensez-vous?

84voto

Mitch Schwartz Points 868

Une façon à laquelle je pense est d'utiliser d'autres variables d'environnement pour stocker des chemins partiels; par exemple, si vous avez

C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1;
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2;

ensuite, vous pouvez créer une nouvelle variable d'environnement tels que

SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places

après que vos originaux chemins deviennent des

%P1%\subdir1;
%P1%\subdir2;

EDIT: une Autre option est de créer un bin répertoire qui contient .bat fichiers qui pointent à l'appropriées .exe fichiers.

EDIT 2: Ben Voigt commentaire une autre réponse mentionne que l'utilisation d'autres variables d'environnement, comme l'a suggéré pourrait ne pas réduire la durée de l' %PATH% parce qu'ils seraient élargies avant de les stocker. Cela peut être vrai et je n'ai pas testé. Une autre option est d'utiliser 8dot3 formes de plus, les noms de répertoire, par exemple C:\Program Files est généralement équivalent à C:\PROGRA~1. Vous pouvez utiliser dir /x voir les noms plus courts.

EDIT 3: Ce test très simple qui m'amène à croire que Ben Voigt est droit.

set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%

À la fin de cette opération, vous voyez de sortie hellohello plutôt que d' byehello.

EDIT 4: Dans le cas où vous décidez d'utiliser des fichiers batch pour l'élimination de certains chemins de %PATH%, vous pourriez être préoccupé par la façon de transmettre des arguments à partir de votre fichier de commandes à votre exécutable tels que la transparence du processus (c'est à dire, vous ne remarquerez aucune différence entre un appel le fichier de commandes et de l'appel de l'exécutable). Je n'ai pas beaucoup d'expérience dans l'écriture des fichiers batch, mais cela semble bien fonctionner.

@echo off

rem This batch file points to an executable of the same name
rem that is located in another directory. Specify the directory
rem here:

set actualdir=c:\this_is\an_example_path

rem You do not need to change anything that follows.

set actualfile=%0
set args=%1
:beginloop
if "%1" == "" goto endloop
shift
set args=%args% %1
goto beginloop
:endloop
%actualdir%\%actualfile% %args%

En règle générale, vous devriez être prudent sur l'exécution par lots des fichiers à partir d'internet, puisque vous pouvez faire toutes sortes de choses avec des fichiers de commandes telles que le formatage de votre disque dur. Si vous n'avez pas confiance dans le code ci-dessus (ce que j'ai écrit), vous pouvez le tester en remplaçant la ligne

%actualdir%\%actualfile% %args%

avec

echo %actualdir%\%actualfile% %args%

Idéalement, vous devez savoir exactement ce que chaque ligne ne avant de l'exécuter.

82voto

Todd Smith Points 8297

Cela analyser votre variable d’environnement %PATH% et convertir chaque répertoire à son équivalent shortname et puis reconstituer il tous de retour :

Prendre la sortie et mettre à jour la variable PATH dans les variables d’environnement.

28voto

user3930748 Points 11

Si vous utilisez windows vista ou supérieur, vous pouvez faire un lien symbolique vers le dossier. par exemple :

mklink /j C:\pf « C:\Program Files »

ferait un lien c:\pf serait donc votre dossier program files. J’ai rasé 300 caractères de mon chemin à l’aide de cette astuce.

10voto

YellPika Points 1355

Dans le cas où ça intéresse quelqu'un...

Je trouve que j'ai jamais vraiment besoin de tous ces chemins à la fois, donc je créer un tas de "initialisation" fichiers de commandes pour modifier le chemin en conséquence.

Par exemple, si je voulais faire un peu de développement en C++ sous Eclipse, je voudrais faire:

> initmingw
> initeclipse
> eclipse

C'est également à portée de main pour éviter les conflits entre les exécutables avec le même nom (comme le C++ et D compilateurs, qui ont tous deux un make.exe).

Mes fichiers batch généralement ressembler à ceci:

@echo off
set PATH=C:\Path\To\My\Stuff1;%PATH%
set PATH=C:\Path\To\My\Stuff2;%PATH%

Je trouve cette approche relativement propre et ont encore des problèmes avec elle.

5voto

Android Eve Points 7604

Une autre idée : utiliser DIR /X pour déterminer les noms courts générés pour les noms de fichiers non-8point3. Puis utilisez-les dans vos % Path%.

Par exemple, « C:\Program Files » devient « C:\PROGRA~1 ».

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