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


Respostas:


9

O que você precisa fazer é colocar sua senha entre aspas duplas da seguinte forma:

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

Deixe-me saber como vai.


11
Outra opção que pode ser preferível em alguns cenários éset "pwd=abc&123"
Harry Johnston,

11
-1 é chocante que isso tenha tido 5 votos positivos, está errado. O Windows usa% var% ou! Var! você poderia ter testado você mesmo com tanta facilidade. $ var está em linux, se você echo $ var em janelas ele apenas diz literalmente $ var
barlop

11
@ Barlop: como é a outra linha que trata da questão, não vejo que isso importe.
Harry Johnston

7

Descobri que funciona melhor com uma combinação das respostas de martineau e mastashake57.

set pwd=abc^&123
echo %pwd%

Ainda falha e

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

Adiciona aspas a ele (você não pode remover as aspas com um forloop ou manipulação de sequência, porque ela falhará novamente, graças ao e comercial), o que não é tão bom.

Contudo,

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

Funciona perfeitamente.

Espero que ajude.


+1. Esteja ciente de que isso deixa o quilate na variável de ambiente, ou seja, define pwdcomo abc^&123. Na maioria das vezes, isso provavelmente é exatamente o que você precisa fazer, mas isso pode te surpreender se você não estiver ciente do que está acontecendo.
Harry Johnston

@HarryJohnston Devo corrigir seu erro de ortografia. É cuidado. btw eu sei que ntcmds.chm menciona, mas onde em cmd /? documentação é mencionada sobre o sinal de intercalação como o caractere de escape?
barlop

@ Barlop: assim é; Eu estava confundindo com o homônimo. Como regra geral, /?fornece apenas um resumo, uma documentação não abrangente.
Harry Johnston

@barlop,? O sinal de intercalação é o caractere de escape.
Pacerier

@ Pacerier sim, o sinal de intercalação é o caractere de escape, ninguém discorda disso. e é mencionado que é o caractere de escape, em ntcmds.chm (o ntcmds.chm veio com o XP e está em um equivalente online microsoft.com/resources/documentation/windows/xp/all/proddocs/… e talvez de alguma maneira mais atualizado online - talvez mais comandos). Eu só estava perguntando onde em /? (se em qualquer lugar), ele diz que acento circunflexo é o caractere de escape
barlop

7

No arquivo de ajuda de referência da linha de comandos:

O e comercial (&), o pipe (|) e os parênteses () são caracteres especiais que devem ser precedidos pelo caractere de escape (^) ou aspas quando você os passa como argumentos.

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.


E citações entre aspas?
Pacerier

4

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 evitá-lo ^, resultando em ^&.

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

No entanto echo abc&123, não funciona como o esperado, porque &é um caractere especial. Você pode evitar isso adicionando aspas: echo "abc&123"mas sua saída também conterá os caracteres das aspas. Em outras palavras, usar aspas não é exatamente uma solução adequada.

O que você precisa é escapar do &char quando você executa o echocomando:

echo abc^&123

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

set pwd=abc^^^&123

+1 por apontar a necessidade de escapar do acento circunflexo
jmcg

Funciona muito bem, obrigado. Este caractere de escape não é mencionado no doc em alguma razão docs.microsoft.com/en-us/windows-server/administration/...
Sergey Smolnikov
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.