Мой запрос установлен на $P$_CMD>
(с пробелом в конце). Это работает отлично. Однако,виртуальное окружение'sактивировать.batимеет следующую строку:
set PROMPT=(approot) %PROMPT%
Когда я запускаю эту команду, cmd жалуется, что
The syntax of the command is incorrect.
Этого не было до того, как я изменил приглашение. Я пробовал добавлять кавычки (двойные "
и одинарные '
) вокруг %PROMPT%
, но это не работает. Как мне изменить приглашение, используя старое значение, если старое значение содержит специальные символы?
решение1
С переменной prompt никогда не следует использовать специальные символы. Всегда используйтеspecial codes
которые можно найти, prompt /?
когда это возможно.
В ответ на ваш комментарий:
С другими переменными вы можете использоватьSetLocal EnableDelayedExpansion
. Затем обратитесь к переменным с !
s вместо %
s.
Отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа, эта опция включается с помощью
SETLOCAL command
. Когда действует отложенное расширение, на переменные можно ссылаться с помощью!variable_name!
(в дополнение к обычному%variable_name%
)
Поскольку переменная раскрывается во время выполнения, а специальный символ >
(в данном случае) является специальным только во время анализа, вы полностью обходите эту проблему.
Например:
SetLocal EnableDelayedExpansion
set test=World^>
set test2=Hello !test!
Обратите внимание, что ^
это экранирующий символ, позволяющий вводить специальные символы (переменная будет сохранена как World>
, поэтому, если вы не set test=World^^^>
приведете к сохраненному значению World^>
, это не сработает для вашего вопроса).
Экранирование может быть сложным. Например, чтобы задать test2
литерал !test!
, нужно использовать ^^!test^^!
, иначе вы просто получите значение test
. Если мне действительно нужно, я обычно просто меняю количество экранирующих символов, пока это не заработает, это проще, чем пытаться разобраться в правилах синтаксического анализа.