En Bash, puedo hacer EDITOR=vim command
y command
se ejecutará con EDITOR
set to vim
, pero esto no afectará el valor de EDITOR
en el propio shell. ¿Es posible hacer esto en cmd.exe
?
En Bash, puedo hacer EDITOR=vim command
y command
se ejecutará con EDITOR
set to vim
, pero esto no afectará el valor de EDITOR
en el propio shell. ¿Es posible hacer esto en cmd.exe
?
Respuestas:
Tenga en cuenta que cmd /C "set "EDITOR=vim" && echo %EDITOR%"
no funcionaría.
Tampoco lo haríacmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Cuál sería la /V
opción, para permitir la expansión variable de entorno diferido utilizando !
como delimitador.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Como se señala a continuación por maoizm , es cmd /V /C
, no cmd /C /V
(que no funcionaría)
No puedo pensar en ninguna razón práctica por la que realmente quieras esto en el contexto de un solo comando
Normalmente, necesita esto cuando tiene que reemplazar un valor utilizado varias veces en una línea de comando larga.
Por ejemplo, para implementar un archivo en Nexus (en varias líneas para facilitar la lectura):
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/"
En lugar de tener que reemplazar el grupo, el artefacto (usado 2 veces) y la versión en una línea de comando larga y compleja, puede editarlos al comienzo de dicho comando. Es más claro / fácil manipular y cambiar los valores de los parámetros.
'vim'
sino 'vim '
en el último comando. Agregue las comillas internas para evitar el espacio al final.
cmd /v/c "..."
funciona, pero cmd /c/v "..."
falla - espero que pueda ahorrarte 15 minutos
Puede hacerlo en ventanas como esta sin necesidad de instalar nada.
cmd /C "set EDITOR=vim && set"
Verá una lista de variables y verá EDITOR = vim, ahora ejecute "set" nuevamente y no aparecerá en la lista.
Puede hacer múltiples && 's para agregar comandos adicionales:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDITAR: / C sale del nuevo cmd inmediatamente después de ejecutarse, si produce una salida con el nuevo, seguirá siendo visible en la ventana principal.
Puede optar por usar / K, en cuyo caso la nueva ventana cmd permanece abierta al final de la ejecución.
set name=foo&&echo %name%
o set username=foo&&echo %username%
?
puede usar la utilidad portada env
del paquete CoreUtils en GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
existe en la variable% PATH%env EDITOR=vim command
He generado un archivo por lotes env.cmd
que funciona más o menos como el env
comando de 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
La única diferencia es que, debido a la forma en que se cmd
analiza, se deben citar las asignaciones de entorno, por lo que su comando sería:
env "EDITOR=vim" command [up to 8 parameters]
El archivo por lotes podría elaborarse para eliminar la restricción de 8 parámetros mediante la construcción de la cadena de comandos dentro del for
bucle (se necesitará una expansión retardada).
%*
como penúltima línea (es decir, la que está después de la :DoCmd
etiqueta) para permitir comandos de usuario muy largos?
%*
es la lista de parámetros original : no se ve afectada por shift
(a diferencia $*
de Unix).