2012-03-22 4 views
1

CALL 문으로 배치 파일을 실행하고 매개 변수를 전달해야합니다.^기호가 필요할 때까지 모든 것이 잘 작동합니다.CALL에서 이스케이프 시퀀스 사용^

나는 XP와 두 개의 간단한 명령으로 재현 할 수있는 문제를 실행 해요 : CALL없이

내가하지 할 피할 수있는 방법 CALL

c:\>call echo password: "secret(<^>)secret" 
password: "secret(<^^>)secret" 

c:\>echo password: "secret(<^>)secret" 
password: "secret(<^>)secret" 

CALL을 사용할 때^기호를 복제합니까?

+1

를 읽을 수 당신이 어디에서 온 당신이 관심이 있다면 암호를 반향'call'를 사용해야합니까? –

+0

괄호 블록에있는 것처럼 CALL이 필요하다고 가정하지만 지연된 확장이 더 나은 선택입니다 – jeb

답변

1

CALL은 두 번째로 줄을 다시 인쇄하기 직전에 항상 모든 캐럿을 두 번 사용하므로이 방법으로 피할 수 없습니다.

당신이 정말로 당신이 CALL-캐럿-배로 후 변수에 데이터를 넣고이를 확장해야 CALL를 사용해야하는 경우

set "myVar=secret(<^>)secret" 
set myVar 
call echo Password "%%myVar%%" 

하지만 그렇다하더라도 당신은 문제가, 당신의 비밀이 포함 된 경우 따옴표가있어, 또는 따옴표없이 변수를 사용하려는 경우.

따라서 지연 확장을 더 잘 사용해야합니다.
이것은 대괄호 안의 (CALL없이) 작동합니다.

setlocal EnableDelayedExpansion 
(
    set "myVar=secret(<^>)secret" 
    echo !myVar! 
) 

그리고 이중 캐럿이
How does CMD.EXE parse scripts

관련 문제