С переменной 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-символов, пока это не сработает, это проще, чем пытаться выяснить правила синтаксического анализа.