![Configurando e usando variável na mesma linha de comando no Windows cmd.exe](https://rvso.com/image/1259401/Configurando%20e%20usando%20vari%C3%A1vel%20na%20mesma%20linha%20de%20comando%20no%20Windows%20cmd.exe.png)
No Bash, posso fazer EDITOR=vim command
e command
serei executado com EDITOR
set to vim
, mas isso não afetará o valor de EDITOR
no 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
/V
opçã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 env
do pacote CoreUtils no GnuWin32http://gnuwin32.sourceforge.net/
- Configure-o
- Verifique qual diretório
env.exe
existe na variável% PATH% - Use da mesma forma que a versão Linux
env EDITOR=vim command
Responder4
Criei um arquivo em lote env.cmd
que funciona mais ou menos como o env
comando 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 cmd
aná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 for
loop (será necessária uma expansão atrasada).