2013-12-20 4 views
1

Using batch echo with special characters잠재적으로 필요한 이스케이프 문자 처리

특수 문자 일 수도 있고 아닐 수도있는 텍스트에 이스케이프 문자를 사용하는 방법은 무엇입니까? 나는 텍스트는 사용자가 특수 문자 같은 것을 입력해도 텍스트로 해석됩니다 있는지 확인해야합니다, 지금

Set /p var=prompt: 

:

는 우리가 사용자의 입력을 가정 해 봅시다. 하지만 단순히 변수 앞에 ^를 추가 할 수는 없습니다 ... 왜냐하면 변수를 취소하기 때문입니다. ^^ % var % 및^%% var % 옵션이 작동하지 않는 것 같습니다.

어떻게해야합니까?

+0

가능한 중복 (http://stackoverflow.com/questions/3854779/escape-characters- : 물론,이 방법의 힘은 내부 루프를 endlocal 명령 를 삽입 in-batch-scripts) – djechlin

+1

@djechlin 필자는 그렇게 생각하지 않습니다. 솔루션은 TYPE 명령을 사용했는데, 이는 필자가 파일에서 읽지 않았기 때문에 가능하지 않습니다. – Kravaros

답변

5

사용자 프로그램의 소스 코드 또는 %variable% 또는 for 명령의 replaceable 매개 변수를 통해 변수를 확장 할 때 이스케이프가 필요하다는 것을 알아야합니다. ! delayed!를 통해 변수를 확장하는 경우에는 필요하지 않습니다! 확장.

setlocal EnableDelayedExpansion 

Set /p var=prompt: 
echo !var! 

당신이 값이 asigned 때 따옴표로 대체 매개 변수의 값을 둘러싸되는 특수 문자를 가질 수있는 파일을 읽을 때 문제를 방지 할 수있는 표준 방법 : 그래서, 문제는 쉽게 이런 식으로 해결 될 수있다 Delayed Expansion을 비활성화하고 Delayed Expansion을 활성화하여 값을 관리합니다. [배치 스크립트에서 문자를 탈출]의

for /F "delims=" %%a in (anyFile.txt) do (
    set "line=%%a" 
    setlocal EnableDelayedExpansion 
    echo Line with special characters: !line! 
    endlocal 
) 
0

불가능합니다. 쉘은 스크립트가 수행하기 전에 사용자 입력을 처리합니다. 스크립트는 사용자가 이스케이프 문자를 입력했는지조차 알지 못합니다.

+0

주된 문제는 사용자가 이스케이프 문자를 입력하는 것이 아니라 특수 문자입니다. 그럼에도 불구하고 내가 감사하는 것보다 똑같이 작동한다고 가정하는 것이 옳은 경우입니다. – Kravaros

+2

@djechin 가능합니다. Aacini의 답변을 참조하십시오. 그리고 이스케이프 문자는 처리되지 않고 변수에도 할당됩니다. – jeb

관련 문제