Как изменить переменную окружения с помощью специальных символов?
Моя подсказка настроена на $P$_CMD>
(с пробелом в конце). Это прекрасно работает. Однако, virtualenv's activ.bat имеет следующую строку:
set PROMPT=(approot) %PROMPT%
Когда я запускаю эту команду, cmd жалуется, что
The syntax of the command is incorrect.
Этого не произошло до того, как я изменил свое приглашение. Я пытался добавить кавычки (двойной "
и один '
) вокруг %PROMPT%
, но это не работает. Как изменить подсказку, используя старое значение, если старое значение содержит специальные символы?
1 ответ
С переменной prompt вы никогда не должны использовать специальные символы. Всегда используйте special codes
что можно найти с prompt /?
когда возможно.
В ответ на ваш комментарий:
С другими переменными вы можете использовать SetLocal EnableDelayedExpansion
, Затем обратитесь к переменным с !
с вместо %
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-символов, пока это не сработает, это проще, чем пытаться выяснить правила синтаксического анализа.