existe uma fuga para o caractere '&' no prompt de comando?

8

Estou tentando algo como:

set pwd = abc&123
echo password %pwd%

Eu obtenho o resultado como ...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

O sistema é assim ou há uma fuga para esses caracteres?

    
por deostroll 12.02.2013 / 15:24

4 respostas

7

O que você precisa fazer é colocar sua senha entre aspas assim:

set pwd="abc&123"
echo %pwd%

Deixe-me saber como é isso.

    
por 12.02.2013 / 15:47
5

Descobri que funciona melhor com uma combinação da resposta de ambos os martineau e a resposta do mastashake57.

set pwd=abc^&123
echo %pwd%

Ainda falha e

set pwd="abc&123"
echo %pwd%

Adiciona aspas a ele (não é possível remover as aspas com um loop for ou string manipulável porque ele falhará novamente, graças ao e comercial), o que não é ótimo.

No entanto,

set "pwd=abc^&123"
echo %pwd%

Funciona perfeitamente.

Espero que ajude.

    
por 10.03.2013 / 01:43
5

A partir do arquivo de ajuda de referência da linha de comando:

The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

Parece que colocar a senha inteira entre aspas seria mais fácil do que escapar de caracteres individuais se houver mais de dois caracteres nela que precisem de tratamento.

    
por 12.02.2013 / 17:48
1

O que você realmente precisa é:

set pwd=abc^^^&123
echo %pwd%

Ou:

set "pwd=abc^&123"
echo %pwd%

Explicação:

Como & é um caractere especial, você deve escapar com ^ , resultando em ^& .

A execução de set pwd=abc^&123 definirá a variável como o valor abc&123 . Depois disso, se você executar echo %pwd% , estará executando echo abc&123 .

Ainda, echo abc&123 não funciona como esperado, porque & é um caractere especial. Você pode evitar isso adicionando aspas: echo "abc&123" , mas sua saída também teria os caracteres de cotação. Em outras palavras, usar citações não é exatamente uma solução adequada.

O que você precisa é escapar do & char quando você executar o comando echo :

echo abc^&123

Portanto, a variável precisa conter o valor abc^&123 . Para definir a variável com o valor abc^&123 , você precisaria escapar dos caracteres especiais ^ e & , resultando em:

set pwd=abc^^^&123
    
por 25.08.2015 / 19:39