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.

谷口 昂 平
la source
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.
DavidPostill
la source
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