Как изменить переменную среды с помощью специальных символов?

Как изменить переменную среды с помощью специальных символов?

Мой запрос установлен на $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. Если мне действительно нужно, я обычно просто меняю количество экранирующих символов, пока это не заработает, это проще, чем пытаться разобраться в правилах синтаксического анализа.

Связанный контент