Моя подсказка установлена в $P$_CMD> (с пробелом в конце). Это прекрасно работает. Тем не менее, virtualenv «S activate.bat имеет следующую строку:

set PROMPT=(approot) %PROMPT%

Когда я запускаю эту команду, cmd жалуется, что

The syntax of the command is incorrect.

Этого не произошло до того, как я изменил свое приглашение. Я пытался добавить кавычки (двойные " и одинарные ') вокруг %PROMPT% , но это не работает. Как изменить подсказку, используя старое значение, если старое значение содержит специальные символы?

1 ответ1

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .