Como você define variáveis ​​de ambiente para um único comando no Windows? [duplicado]

19

Esta pergunta já tem uma resposta aqui:

Existe uma maneira de definir variáveis ​​de ambiente para um único comando no Windows, como ENVVAR=abc commandno Unix?

Variáveis ​​definidas por setcomando no Windows parecem permanecer para os seguintes comandos, mas não é isso que eu quero.

谷口 昂 平
fonte
Eu acho que você terá que desmarcá-las você mesmo.
Zina

Respostas:

26

Existe uma maneira de definir variáveis ​​de ambiente para um único comando?

No cmdshell atual :

Você precisa limpar a variável você mesmo.

set ENVVAR=abc && dir & set ENVVAR=

De um arquivo em lotes:

Você pode usar setlocale endlocal.

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

Use um cmdshell filho :

Você pode usar cmd /cpara criar um shell filho.

A variável é definida no shell filho e não afeta o shell pai (como apontado em um comentário por jpmc26 ).

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

Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD - uma excelente referência para todos os itens relacionados à linha de cmd do Windows.
  • cmd - Inicie um novo shell do CMD e (opcionalmente) execute um programa de comando / executável.
  • endlocal - finaliza a localização das alterações do ambiente em um arquivo em lotes. Passe variáveis ​​de um arquivo em lotes para outro.
  • redirecionamento - operadores de redirecionamento.
  • set - Exibe, define ou remove variáveis ​​de ambiente CMD. As alterações feitas com o SET permanecerão apenas durante a sessão atual do CMD.
  • setlocal - Defina opções para controlar a visibilidade de variáveis ​​de ambiente em um arquivo em lotes.
DavidPostill
fonte
Outra opção é iniciar um cmdprocesso separado e defini-lo lá. Por exemplo cmd /C "set ENVVAR=abc && dir",. Como não afetará o processo pai, será efetivamente "limpo" na saída.
Jpmc26 06/03
@ jpmc26 Bom. Obrigado. Adicionado para responder.
DavidPostill
Esse primeiro método não limpará a variável se o comando falhar.
Andrew Medico
@AndrewMedico Thanks. Bom ponto. Resposta corrigida.
DavidPostill