Come si impostano le variabili di ambiente per un singolo comando su Windows? [duplicare]


21

C'è un modo per impostare le variabili di ambiente per un singolo comando su Windows come ENVVAR=abc commandsu Unix?

Le variabili impostate dal setcomando su Windows sembrano rimanere per i seguenti comandi, ma questo non è quello che voglio.


Penso che dovrai disinserirli tu stesso.
Zina

Risposte:


29

C'è un modo per impostare le variabili di ambiente per un singolo comando?

Dalla cmdshell corrente :

Devi cancellare tu stesso la variabile.

set ENVVAR=abc && dir & set ENVVAR=

Da un file batch:

Puoi usare setlocale endlocal.

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

Usa una cmdshell figlio :

È possibile utilizzare cmd /cper creare una shell figlio.

La variabile è impostata nella shell figlio e non influisce sulla shell padre (come sottolineato in un commento di jpmc26 ).

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

Ulteriori letture

  • Un indice AZ della riga di comando CMD di Windows - Un riferimento eccellente per tutte le cose relative alla riga cmd di Windows.
  • cmd - Avvia una nuova shell CMD ed (facoltativamente) esegue un comando / programma eseguibile.
  • endlocal - Termina la localizzazione delle modifiche all'ambiente in un file batch. Passare le variabili da un file batch a un altro.
  • reindirizzamento : operatori di reindirizzamento.
  • set - Visualizza, imposta o rimuove le variabili di ambiente CMD. Le modifiche apportate con SET rimarranno solo per la durata della sessione CMD corrente.
  • setlocal - Imposta le opzioni per controllare la visibilità delle variabili di ambiente in un file batch.

Un'altra opzione è quella di avviare un cmdprocesso separato e impostarli lì. Ad es cmd /C "set ENVVAR=abc && dir". Poiché non influirà sul processo padre, verrà effettivamente "cancellato" all'uscita.
jpmc26

@ jpmc26 Buono. Grazie. Aggiunto per rispondere.
David Post

Quel primo metodo non cancellerà la variabile se il comando fallisce.
nessuno

@AndrewMedico Grazie. Buon punto. Risposta risolta.
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.