내 프롬프트는 $P$_CMD>
(끝에 공백 포함)로 설정되어 있습니다. 이것은 훌륭하게 작동합니다. 하지만,가상 환경'에스활성화.bat다음 줄이 있습니다 :
set PROMPT=(approot) %PROMPT%
해당 명령을 실행하면 cmd가 다음과 같이 불평합니다.
The syntax of the command is incorrect.
프롬프트를 변경하기 전에는 이런 일이 발생하지 않았습니다. 주위에 따옴표(이중 "
및 단일 '
) 를 추가해 보았지만 %PROMPT%
작동하지 않습니다. 이전 값에 특수 문자가 포함된 경우 이전 값을 활용하여 프롬프트를 어떻게 수정합니까?
답변1
프롬프트 변수에는 특수 문자를 사용하면 안 됩니다. 항상special codes
prompt /?
가능할 때마다 찾을 수 있습니다 .
귀하의 의견에 대한 답변:
다른 변수와 함께 사용할 수 있습니다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
. 정말로 필요한 경우 일반적으로 작동할 때까지 이스케이프 문자 수를 변경합니다. 구문 분석 규칙을 알아내려고 노력하는 것보다 쉽습니다.