Digamos que eu execute o seguinte no shell CMD:
set FOO=bar
Existe uma maneira de undefine esta variável, diferente de reciclar o shell CMD?
Digamos que eu execute o seguinte no shell CMD:
set FOO=bar
Existe uma maneira de undefine esta variável, diferente de reciclar o shell CMD?
set var=
resposta funciona no MS-DOS 6.22 command.com da mesma forma que no Windows cmd.exe. (No entanto, ao contrário do Windows, colocar aspas duplas em torno de var = não funciona; em vez disso, ele cria uma variável de ambiente cujo nome começa com aspas duplas.)
Respostas:
Sim, você pode desarmar com
set FOO=
Ou usando explicitamente:
set "FOO="
Certifique-se de que nenhum caractere estranho (invisível) atrás do =
sinal. Isso é:
set FOO=
é diferente de set FOO=
.Isso funciona para mim no meu shell CMD do Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
comando. Se você tentar set FOO = bar
e depois tentar set FOO=
, não removerá 'FOO'. Por alguma razão, porém, eles não são (como?) Significativos por dentro % %
.
Eu ofereceria o seguinte apenas como um comentário, mas acho que é importante o suficiente para ser autônomo.
Muitas das respostas anteriores mencionaram que é preciso ter cuidado com espaços à direita; e com certeza isso é verdade. No entanto, descobri que às vezes os espaços finais só querem entrar lá, não importa o que aconteça - particularmente se você estiver fazendo uma linha de comando de uma linha e precisar do espaço como separador de comando.
Esta é a solução para esse problema:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
Colocando a declaração entre aspas duplas dessa maneira, o problema de espaçamento pode ser totalmente evitado. Isso também pode ser muito útil quando as variáveis são criadas concatenando para eliminar espaços entre - por exemplo - caminhos, por exemplo:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
) ??