С переменной prompt вы никогда не должны использовать специальные символы. Всегда используйте special codes которые можно найти с prompt /? когда возможно.
В ответ на ваш комментарий:
С другими переменными вы можете использовать SetLocal EnableDelayedExpansion. Затем обратитесь к переменным с помощью !s вместо % s.
Задержка расширения приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа, эта опция включается командой SETLOCAL command . Когда действует отложенное расширение, на переменные можно ссылаться с помощью !variable_name! (в дополнение к обычному %variable_name%)
Поскольку переменная раскрывается во время выполнения, а специальный символ > (в данном случае) является специальным только во время разбора, вы полностью обойдете проблему.
Например:
SetLocal EnableDelayedExpansion
set test=World^>
set test2=Hello !test!
Обратите внимание, что ^ является escape-символом, позволяющим вам вводить специальные символы (переменная будет сохранена как World> , поэтому, если вы не set test=World^^^> ведущий к сохраненному значению World^> , это не будет работать на ваш вопрос.
Побег может быть сложным. Например, чтобы установить test2 на литерал !test! , вам нужно использовать ^^!test^^! иначе вы просто получите значение test . Если мне действительно нужно, я обычно просто изменяю число escape-символов, пока это не сработает, это проще, чем пытаться выяснить правила синтаксического анализа.