Meu prompt está definido como $P$_CMD>
(com um espaço no final). Isso funciona muito bem. No entanto,virtualenvdeativar.battem a seguinte linha:
set PROMPT=(approot) %PROMPT%
Quando executo esse comando, o cmd reclama que
The syntax of the command is incorrect.
Isso não aconteceu antes de eu mudar meu prompt. Eu tentei adicionar aspas (double "
e single '
) ao redor %PROMPT%
, mas isso não funciona. Como modifico o prompt, utilizando o valor antigo, quando o valor antigo contém caracteres especiais?
Responder1
Com a variável prompt, você nunca deve usar caracteres especiais. Utilize sempre ospecial codes
que pode ser encontrado prompt /?
sempre que possível.
Em resposta ao seu comentário:
Com outras variáveis, você pode usarSetLocal EnableDelayedExpansion
. Em seguida, consulte as variáveis com !
s em vez de %
s.
A expansão atrasada fará com que as variáveis sejam expandidas no tempo de execução, e não no tempo de análise. Esta opção é ativada com o
SETLOCAL command
. Quando a expansão atrasada está em vigor, as variáveis podem ser referenciadas usando!variable_name!
(além do normal%variable_name%
)
Como a variável é expandida em tempo de execução e o caractere especial >
(neste caso) só é especial em tempo de análise, você evita totalmente o problema.
Por exemplo:
SetLocal EnableDelayedExpansion
set test=World^>
set test2=Hello !test!
Observe que ^
é o caractere de escape, permitindo que você insira caracteres especiais (a variável seria armazenada como World>
, portanto, a menos que você set test=World^^^>
leve a um valor armazenado de World^>
, isso não funcionará para sua pergunta.
Escapar pode ser complicado. Por exemplo, para definir test2
como literal !test!
, você precisa usar ^^!test^^!
, caso contrário, obterá apenas o valor de test
. Se eu realmente precisar, normalmente apenas vario o número de caracteres de escape até que funcione, é mais fácil do que tentar descobrir as regras de análise.