¿Cómo se configuran las variables de entorno para un solo comando en Windows? [duplicar]

21

¿Hay alguna manera de establecer variables de entorno para un solo comando en Windows como ENVVAR=abc commanden Unix?

Las variables establecidas por setcomando en Windows parecen permanecer para los siguientes comandos, pero esto no es lo que quiero.

谷口 昂 平
fuente
Creo que tendrás que desarmarlos tú mismo.
Zina

Respuestas:

29

¿Hay alguna manera de establecer variables de entorno para un solo comando?

Desde el cmdshell actual :

Tienes que borrar la variable tú mismo.

set ENVVAR=abc && dir & set ENVVAR=

De un archivo por lotes:

Puedes usar setlocaly endlocal.

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

Use un cmdcaparazón secundario :

Puede usar cmd /cpara crear un shell hijo.

La variable se establece en el shell hijo y no afecta al shell padre (como se señala en un comentario de jpmc26 ).

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

Otras lecturas

  • Un índice AZ de la línea de comando CMD de Windows : una excelente referencia para todo lo relacionado con la línea cmd de Windows.
  • cmd : inicie un nuevo shell CMD y (opcionalmente) ejecute un comando / programa ejecutable.
  • endlocal : finaliza la localización de los cambios del entorno en un archivo por lotes. Pase variables de un archivo por lotes a otro.
  • redirección : operadores de redireccionamiento.
  • set : muestra, establece o elimina variables de entorno CMD. Los cambios realizados con SET solo se mantendrán durante la sesión CMD actual.
  • setlocal : establece opciones para controlar la visibilidad de las variables de entorno en un archivo por lotes.
DavidPostill
fuente
Otra opción es iniciar un cmdproceso separado y configurarlos allí. Ej cmd /C "set ENVVAR=abc && dir". Como no afectará el proceso padre, se "borrará" efectivamente al salir.
jpmc26
@ jpmc26 Buena. Gracias. Añadido a la respuesta.
DavidPostill
Ese primer método no borrará la variable si el comando falla.
nadie
@AndrewMedico Gracias. Buen punto. Respuesta arreglada.
DavidPostill