Configurando e usando variável na mesma linha de comando no Windows cmd.exe

Configurando e usando variável na mesma linha de comando no Windows cmd.exe

No Bash, posso fazer EDITOR=vim commande commandserei executado com EDITORset to vim, mas isso não afetará o valor de EDITORno próprio shell. É possível fazer isso em cmd.exe?

Responder1

Observe que isso cmd /C "set "EDITOR=vim" && echo %EDITOR%"não funcionaria.
Nem fariacmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"

Você precisaria de:

  • a /Vopção, para ativar a expansão atrasada da variável de ambiente usando !como delimitador.
  • sem espaço entre um comando e o &&(ou adicione aspas)

Aquilo é:

C:\> cmd /V /C "set EDITOR=vim&& echo '!EDITOR!'"
'vim'
# or
C:\> cmd /V /C "set "EDITOR=vim" && echo '!EDITOR!'"
'vim'

Comoanotado abaixopormaoizm, isso é cmd /V /C,não cmd /C /V(qual serianãotrabalhar)


Não consigo pensar em nenhuma razão prática para você realmente querer isso no contexto de um único comando

Normalmente, você precisa disso quando precisa substituir um valor usado várias vezes em uma linha de comando longa.
Por exemplo, para implantar um arquivo no Nexus (em várias linhas para facilitar a leitura):

cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
           mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
           -Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
           -DrepositoryId=nexus 
           -Durl=http://myserver/nexus/content/repositories/my-repo/"

Em vez de substituir grupo, artefato (usado 2 vezes) e versão em uma linha de comando longa e complexa, você pode editá-los nocomeçodo referido comando. É mais claro/fácil manipular e alterar os valores dos parâmetros.

Responder2

Você pode fazer isso em janelas como esta, sem necessidade de instalar nada.

cmd /C "set EDITOR=vim && set"

Você verá uma lista de variáveis ​​e verá EDITOR=vim, agora execute "set" novamente e ele não será listado.

Você pode fazer vários && para adicionar comandos adicionais:

cmd /C "set EDITOR=vim && do this && do that && otherstuff"

EDIT: /C sai do novo cmd imediatamente após a execução, se você produzir uma saída com o novo, ele ainda estará visível na janela pai.

Você pode optar por usar /K, caso em que a nova janela do cmd permanecerá aberta no final da execução.

Responder3

você pode usar o utilitário portado envdo pacote CoreUtils no GnuWin32http://gnuwin32.sourceforge.net/

  1. Configure-o
  2. Verifique qual diretório env.exeexiste na variável% PATH%
  3. Use da mesma forma que a versão Linux env EDITOR=vim command

Responder4

Criei um arquivo em lote env.cmdque funciona mais ou menos como o envcomando do Linux: -

echo off
setlocal
for %%f in (%*) do (
  echo %%f|find "=" >nul:
  if errorlevel 1 goto DoCmd
  set %%f
  shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal

A única diferença é que, devido à forma de cmdanálise, as atribuições do ambiente precisam ser citadas, então seu comando seria:

env "EDITOR=vim" command [up to 8 parameters]

O arquivo em lote pode ser elaborado para remover a restrição de 8 parâmetros construindo a string de comando dentro do forloop (será necessária uma expansão atrasada).

informação relacionada