Com a variável prompt, você nunca deve usar caracteres especiais. Sempre use o special codes
que pode ser encontrado com prompt /?
sempre que possível.
Em resposta ao seu comentário:
Com outras variáveis, você pode usar SetLocal EnableDelayedExpansion
. Em seguida, consulte as variáveis com !
s em vez de %
s.
Delayed Expansion will cause variables to be expanded at execution time rather than at parse time, this option is turned on with the
SETLOCAL command
. When delayed expansion is in effect variables may be referenced using!variable_name!
(in addition to the normal%variable_name%
)
Como a variável é expandida em tempo de execução, e o caractere especial >
(neste caso) é especial apenas no momento da análise, você evita o problema completamente.
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ê use set test=World^^^>
levando a um valor armazenado de World^>
, trabalhe para sua pergunta.
Escapar pode ficar complicado. Por exemplo, para definir test2
para o literal !test!
, você precisa usar ^^!test^^!
, caso contrário, você obterá apenas o valor de test
. Se eu realmente precisar, normalmente só vario o número de caracteres de escape até que funcione, é mais fácil do que tentar descobrir as regras de análise.