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.