Janelas eco comando não pode ecoar uma variável definida pelo usuário
-
19-09-2019 - |
Pergunta
O que eu fiz para estragar a minha shell CMD? Windows XP Pro, abra uma janela cmd e fazer:
C:\>set tt = name
C:\>set tt
tt = name
C:\>echo %tt%
%tt%
C:\>echo %time%
14:13:28.67
O comando echo não funciona por algum motivo. Posso refletem o bem variáveis ??internas. Tentou fazê-lo em outro computador e que funciona como o esperado
Solução
O comando set
não leva espaços. A sintaxe apropriada seria:
set tt=name
O que você fez no seu exemplo é definir um tt<space>
ambiente variável. Com isso em mente, você pode tentar o seguinte:
echo %tt%
e veja sua saída.
Outras dicas
Você tentou definir a variável sem espaço entre os iguais? (Conjunto tt = nome)
A resposta mais upvoted aqui, aceitou muito atrás, afirma que:
"O comando
set
não leva espaços."
Mas isso não é correto: A variável %tt %
realmente funciona: Pode ser definido e referenciado. (Apesar de é confundindo.)
Problema reproduzida:
Na verdade, no meu Win7:
C:\>set os
OS=Windows_NT
C:\>set tt = name
C:\>set tt2= name
C:\>set tt3=name
C:\>set tt
tt = name
tt2= name
tt3=name
Eu tentei e tenho:
C:\>echo "%os%"
"Windows_NT"
C:\>echo "%tt3%"
"name"
C:\>echo "%tt2%"
" name"
C:\>echo "%tt%"
"%tt%"
casos resolvidos:
O %tt%
variável intuitivamente esperado não está definido. Mas %tt %
é definido em vez disso:
C:\>echo "%tt %"
" name"
Ainda mais, com um espaço no final do valor, set tt4 = name
:
C:\>echo "%tt4 %"
" name "
Conclusões:
O comando set
não trim()
:
- O espaço antes "=" está incluído para o
var_name
. - O espaço após "=" está incluído para o
var_value
. - O espaço no final do
var_value
está incluída a ele.
Por outro lado:
- O espaço no início da
var_name
não está incluída a ele, que é bastante normal para os argumentos da linha de comando em geral.