Invite de commandes - Comment ajouter un chemin défini uniquement pour l'exécution de ce fichier de commandes?

187

En gros, je sais que je peux passer par mon panneau de contrôle et modifier la variable de chemin. Mais, je me demande s'il existe un moyen de via la programmation par lots avoir un chemin temporaire inclus? De cette façon, il n'est utilisé que pendant l'exécution de ce fichier de commandes. Je ne veux pas que les gens entrent et modifient leurs variables de chemin juste pour utiliser mon fichier de commandes.

Michael
la source

Réponses:

318

Comme toute autre variable d'environnement, avec SET:

SET PATH=%PATH%;c:\whatever\else

Si vous voulez avoir un petit contrôle de sécurité intégré en premier, vérifiez si le nouveau chemin existe en premier:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

Si vous voulez que ce soit local dans ce fichier de commandes, utilisez setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

Lisez attentivement la documentation pour setlocal/ endlocal, et jetez un œil aux autres références sur ce site - Les fonctions sont également assez intéressantes et la syntaxe est délicate.

La page Syntaxe devrait vous permettre de commencer avec les bases.

Tapis
la source
3
Si vous ajoutez un setlocalà votre fichier de commandes, le chemin n'est visible que dans le fichier
jeb
comment ajoutez-vous "setlocal"? Est-ce à la place de "SET"?
michael
@micheal: a mis à jour ma réponse avec des liens. Veuillez lire une documentation / exemples / tutoriels sur les scripts cmd - SETc'est vraiment quelque chose que vous devez savoir et comprendre avant de faire des scripts.
Mat
2
Sauveur de vie. J'avais besoin d'ajouter un EV sur un serveur qui ne pouvait pas être redémarré et cela me permet de faire ce dont j'ai besoin sans avoir à planifier un redémarrage!
dav_i
8
Même sans SETLOCALcela, tout au plus ne sera que pour cette session d'invite de commande individuelle - si vous faites cela à partir de plus d'un fichier de commandes et que vous utilisez EXIT /B %N%, vous SETLOCALallez simplement vider vos modifications lorsque le script se termine. : - /
BrainSlugs83
21

Il y a un détail important:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

ne fonctionne pas, alors que

set PATH=C:\linutils;C:\wingit\bin;%PATH%

travaux. La différence, ce sont les citations!

UPD voir aussi le commentaire de venimus

18446744073709551615
la source
3
en fait, il devrait y avoir SET "PATH=...%PATH%"sinon les espaces existant dans le chemin entraîneront des erreurs ou un mauvais comportement. Les mettre entre guillemets comme celui-ci ne les inclura pas mais définira correctement la variable. La même chose fonctionne pour toute autre variable env.
venimus le
20

C'est vrai, mais cela ne le change pas de façon permanente, mais juste pour l'invite de commande actuelle, si vous voulez le changer de manière permanente, vous devez utiliser par exemple ceci:

setx ENV_VAR_NAME "DESIRED_PATH" /m

Cela le changera définitivement et oui, vous pouvez l'écraser par un autre script batch.

idiot
la source
Peut-être a-t-il /mbesoin d'être après setx?
suzanshakya
Fonctionne de la même manière pour moi, mais ce script Win Batch est une petite affaire inachevée de MS. Dans mon entreprise, où nous avons tous les mêmes ordinateurs portables avec le même système, il n'y a pas de script universel pour le réglage PATH et nous en maintenons 2 ou 3, donc tout ce qui fonctionne pour vous :)
dumbak
Merci pour la mise à jour. Dans Windows Server 2012, lorsque j'ai mis /mà la fin, le a DESIRED_PATHété ajouté avec / m à la fin pour l'utilisateur actuel uniquement.
suzanshakya
11
Un mot d'avertissement. En utilisant setx sur un chemin, en essayant d'en ajouter plus, et la chaîne est> 1024 longue, j'ai découvert que le résultat (mon environnement PATH) était tronqué de façon permanente. (Une bonne chose que j'avais pourrait copier le% PATH% que j'avais ECHOed avant le changement, et le remettre en utilisant l'outil de fenêtres de variables d'environnement.)
Andreas Jansson
Attention! Cette commande écrase directement la variable d'environnement système! Je les avais supprimés et essayais de les réparer. Et aussi pour quiconque a commis cette erreur: ne redémarrez pas votre ordinateur. Écrivez echo %path%et vous obtiendrez le chemin chargé actuel. Vous devez distinguer les variables d'environnement utilisateur et système les unes des autres. Ensuite, vous pouvez les appliquer manuellement au bon endroit.
Alper