Comment définissez-vous les variables d'environnement pour une seule commande sous Windows? [dupliquer]


21

Existe-t-il un moyen de définir des variables d'environnement pour une seule commande sous Windows comme ENVVAR=abc commandsous Unix?

Les variables définies par la setcommande sous Windows semblent rester pour les commandes suivantes, mais ce n'est pas ce que je veux.


Je pense que vous devrez les désamorcer vous-même.
Zina

Réponses:


29

Existe-t-il un moyen de définir des variables d'environnement pour une seule commande?

Depuis le cmdshell actuel :

Vous devez effacer la variable vous-même.

set ENVVAR=abc && dir & set ENVVAR=

A partir d'un fichier batch:

Vous pouvez utiliser setlocalet endlocal.

@echo off
setlocal 
  set ENVVAR=abc && dir
endlocal

Utilisez un cmdshell enfant :

Vous pouvez utiliser cmd /cpour créer un shell enfant.

La variable est définie dans le shell enfant et n'affecte pas le shell parent (comme indiqué dans un commentaire de jpmc26 ).

cmd /C "set ENVVAR=abc && dir"

Lectures complémentaires

  • Un index AZ de la ligne de commande Windows CMD - Une excellente référence pour tout ce qui concerne la ligne de commande Windows.
  • cmd - Démarre un nouveau shell CMD et (éventuellement) exécute une commande / un programme exécutable.
  • endlocal - Termine la localisation des changements d'environnement dans un fichier batch. Passez des variables d'un fichier batch à un autre.
  • redirection - Opérateurs de redirection.
  • set - Affiche, définit ou supprime les variables d'environnement CMD. Les modifications apportées avec SET resteront uniquement pour la durée de la session CMD en cours.
  • setlocal - Définit des options pour contrôler la visibilité des variables d'environnement dans un fichier batch.

Une autre option consiste à lancer un cmdprocessus distinct et à les y définir. Par exemple, cmd /C "set ENVVAR=abc && dir". Comme cela n'affectera pas le processus parent, il sera effectivement "effacé" à la sortie.
jpmc26

@ jpmc26 Bon. Merci. Ajouté pour répondre.
DavidPostill

Cette première méthode n'effacera pas la variable si la commande échoue.
personne

@AndrewMedico Merci. Bon point. Réponse fixe.
DavidPostill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.