![Configuración y uso de variables dentro de la misma línea de comando en Windows cmd.exe](https://rvso.com/image/1259401/Configuraci%C3%B3n%20y%20uso%20de%20variables%20dentro%20de%20la%20misma%20l%C3%ADnea%20de%20comando%20en%20Windows%20cmd.exe.png)
En Bash, puedo hacerlo EDITOR=vim command
y command
lo 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
?
Respuesta1
Tenga en cuenta que eso cmd /C "set "EDITOR=vim" && echo %EDITOR%"
no funcionaría.
Tampoco lo haríacmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Necesitarías:
- la
/V
opción para habilitar la expansión retardada de la variable de entorno utilizando!
como delimitador. - sin espacio entre un comando y
&&
(o agregar comillas)
Eso es:
C:\> cmd /V /C "set EDITOR=vim&& echo '!EDITOR!'"
'vim'
# or
C:\> cmd /V /C "set "EDITOR=vim" && echo '!EDITOR!'"
'vim'
Comoanotado abajopormaoizmo, es cmd /V /C
,no cmd /C /V
(Cuál deberíanotrabajar)
No se me ocurre ninguna razón práctica por la que alguna vez 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 grupo, artefacto (usado 2 veces) y versión en una línea de comando larga y compleja, puede editarlos en elcomienzode dicho comando. Es más claro/fácil manipular y cambiar los valores de los parámetros.
Respuesta2
Puedes hacerlo en Windows como este 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.
Puedes hacer múltiples && para agregar comandos adicionales:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDITAR: /C sale del nuevo cmd inmediatamente después de ejecutarlo; si genera resultados con el nuevo, aún estará visible en la ventana principal.
Puede optar por utilizar /K, en cuyo caso la nueva ventana cmd permanece abierta al final de la ejecución.
Respuesta3
puede usar la utilidad portada env
del paquete CoreUtils en GnuWin32http://gnuwin32.sourceforge.net/
- Configurarlo
- Compruebe qué directorio
env.exe
existe en la variable %PATH% - Usar de la misma manera que la versión de Linux.
env EDITOR=vim command
Respuesta4
He creado 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 cmd
de análisis, las asignaciones de entorno deben citarse, 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 creando la cadena de comando dentro del for
bucle (será necesaria una expansión retrasada).