특수 문자를 사용하여 환경 변수를 어떻게 수정합니까?

특수 문자를 사용하여 환경 변수를 어떻게 수정합니까?

내 프롬프트는 $P$_CMD>(끝에 공백 포함)로 설정되어 있습니다. 이것은 훌륭하게 작동합니다. 하지만,가상 환경'에스활성화.bat다음 줄이 있습니다 :

set PROMPT=(approot) %PROMPT%

해당 명령을 실행하면 cmd가 다음과 같이 불평합니다.

The syntax of the command is incorrect.

프롬프트를 변경하기 전에는 이런 일이 발생하지 않았습니다. 주위에 따옴표(이중 "및 단일 ') 를 추가해 보았지만 %PROMPT%작동하지 않습니다. 이전 값에 특수 문자가 포함된 경우 이전 값을 활용하여 프롬프트를 어떻게 수정합니까?

답변1

프롬프트 변수에는 특수 문자를 사용하면 안 됩니다. 항상special codesprompt /?가능할 때마다 찾을 수 있습니다 .

귀하의 의견에 대한 답변:

다른 변수와 함께 사용할 수 있습니다SetLocal EnableDelayedExpansion. 그런 다음 s !대신 s를 사용하여 변수를 참조합니다 %.

지연 확장을 사용하면 구문 분석 시간이 아닌 실행 시간에 변수가 확장됩니다. 이 옵션은 SETLOCAL command. 지연된 확장이 적용되는 경우 변수는 !variable_name!(normal 외에도 %variable_name%) 를 사용하여 참조될 수 있습니다.

변수는 실행 시 확장되고 특수 문자 >(이 경우)는 구문 분석 시에만 특수하므로 문제를 완전히 회피할 수 있습니다.

예를 들어:

SetLocal EnableDelayedExpansion

set test=World^>
set test2=Hello !test!

이는 ^특수 문자를 입력할 수 있는 이스케이프 문자입니다. 변수는 로 저장되므로 저장된 값으로 연결 World>하지 않는 한 질문에 대해서는 작동하지 않습니다.set test=World^^^>World^>

탈출은 복잡해질 수 있습니다. 예를 들어 test2리터럴로 설정하려면 !test!을 사용해야 합니다 ^^!test^^!. 그렇지 않으면 의 값만 얻게 됩니다 test. 정말로 필요한 경우 일반적으로 작동할 때까지 이스케이프 문자 수를 변경합니다. 구문 분석 규칙을 알아내려고 노력하는 것보다 쉽습니다.

관련 정보