2011-08-28 19 views
54

Digamos que ejecute el siguiente en la consola CMD:¿Cómo se define una variable de MS-DOS?

set FOO=bar 

¿Hay una manera remover la definición de esta variable, aparte de reciclar el CMD Shell?

+9

Foro ** ** realmente significa MS-DOS (que ha estado muerto por lo menos 10 años más o menos) - o ¿usted dice * MS-DOS * pero realmente quiere decir la línea de comando de Windows ('cmd.exe') ?? –

+3

Probablemente, pero en realidad no importa para esa pregunta ... –

+2

Marc tiene razón. Este no es el shell de MS-DOS. La gente nunca aprende que esta es una gran diferencia. –

Respuesta

83

Sí, se puede desarmar con

set FOO= 

Nota importante: Asegúrese de que no hay espacios en blanco se arrastran/otros personajes invisibles son después del =. ! set FOO= = set FOO= 

+7

Solo asegúrese de que no haya un espacio en blanco al final. :) –

+1

Estás en lo correcto. Respuesta editada para incluir eso. Gracias @ted –

+10

Mejor aún: Agregar comillas dobles para explicitud: 'set" FOO = "' – kevinarpe

7

Esto funciona para mí en mi Windows 7 consola CMD:

set FOO=bar 
echo %FOO% // bar 
set FOO= 
echo %FOO% // empty; calling "set" no longer lists it 
+2

Los espacios son importantes en el comando 'set'. Si intenta 'establecer FOO = bar' y luego intenta' establecer FOO = ', no se desactivará 'FOO'. Por alguna razón, sin embargo, no son (como?) Significativos dentro de '%%'. –

+0

@ted buen punto! Reparado, gracias. –

+0

El espacio final también es importante. Perdón por la edición, pensé que tu representante dijo 270, no 270k ... uy. A menudo edito las respuestas cuando el representante sugiere que el usuario no regresará.Obviamente no es el caso aquí. Mi error. – chappjc

25

Una forma segura de desactivar la variable es utilizar también cita, entonces no hay problemas con los espacios finales.

set FOO=bar 
echo %FOO% 
set "FOO=" text after the last quote is ignored 
echo %FOO% 
8

otro método

@Echo oFF 

setlocal 
set FOO=bar 
echo %FOO% 
endlocal 

echo %FOO% 

pause 

Nota: Esto no funcionaría en un símbolo del sistema interactivo. Pero funciona en script por lotes.

1

Ofrecería lo siguiente solamente como comentario, pero creo que es lo suficientemente importante como para soportarlo solo.

Muchas de las respuestas anteriores mencionaron que hay que tener cuidado con los espacios finales; y con seguridad eso es verdad Sin embargo, he descubierto que, a veces, los espacios finales solo quieren entrar allí sin importar nada, particularmente si estás haciendo una línea de comando de una sola línea y necesitas el espacio como un separador de comandos.

Esta es la solución a ese problema:

SET FOO=Bar 
echo %FOO% 
:: outputs Bar 
SET "FOO=" 
echo %FOO% 
:: outputs %FOO% 

Envolviendo la declaración entre comillas dobles de esa manera, la cuestión separación puede evitarse por completo. Esto puede también muy útil cuando las variables se crean mediante la concatenación de eliminar los espacios en el medio - por ejemplo - caminos, por ejemplo:

SET A=c:\users\ && SET D=Daniel 
SET P="%a%%d%" 
ECHO %P% 
:: outputs "C:\Users\ Daniel" 
:: Notice the undesirable space there 
Cuestiones relacionadas