Digamos que ejecuto lo siguiente en el shell CMD:
set FOO=bar
¿Hay alguna forma de indefinir esta variable, además de reciclar el shell CMD?
Digamos que ejecuto lo siguiente en el shell CMD:
set FOO=bar
¿Hay alguna forma de indefinir esta variable, además de reciclar el shell CMD?
set var=
respuesta funciona con MS-DOS 6.22 command.com de la misma manera que con Windows cmd.exe. (Sin embargo, a diferencia de Windows, poner comillas dobles alrededor de var = no funciona, sino que crea una variable de entorno cuyo nombre comienza con una comilla doble).
Respuestas:
Sí, puedes desarmarlo con
set FOO=
O usando explícitamente:
set "FOO="
Asegúrese de que no aparezcan caracteres extraños (invisibles) después del =
signo. Es decir:
set FOO=
es diferente de set FOO=
.Esto funciona para mí en mi shell CMD de Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
comando. Si lo intenta set FOO = bar
y luego lo intenta set FOO=
, no desarmará 'FOO'. Sin embargo, por alguna razón, no son (¿tan?) Importantes por dentro % %
.
Ofrecería lo siguiente solo como comentario, pero creo que es lo suficientemente importante como para valerse por sí solo.
Muchas de las respuestas anteriores mencionaron que hay que tener cuidado con los espacios finales; y seguro que es cierto. Sin embargo, descubrí que a veces los espacios finales solo quieren ingresar allí sin importar qué, particularmente si está haciendo una línea de comando de una sola línea y necesita el espacio como un separador de comando.
Esta es la solución a ese problema:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
Al envolver la declaración entre comillas dobles de esa manera, el problema del espaciado se puede evitar por completo. Esto también puede ser realmente útil cuando las variables se crean concatenando para eliminar espacios entre, por ejemplo, rutas, por ejemplo:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
)?