2013-06-28 4 views
2

나는 창 명령 줄 스크립트에 대한/F 문에서 앰퍼샌드 탈출을 시도하고, 같은 앰퍼샌드 : 스크립트를 실행 한는 다음과 같이 FOR에서 DELIM/F 문

FOR /F "tokens=1,2 delims=^&" %%A IN ("%Var%") DO (... 

결과 여전히 :

& was unexpected at this time 

&을 delimeter로 사용하는 올바른 방법은 무엇입니까? 또는 파싱 할 문자열에서 다른 것으로 대체해야합니까?

+1

표시된 코드로 오류가 생성되지 않습니다. 이 테스트는 'FOR/F'토큰 = 1,2 delims =^& "%% A IN ("123 & 456 ") Do echo %% A, %% B'에서 작동합니다. 그러나'^ &'는 델파 미터로 앰퍼샌드와 캐럿을 정의합니다. – jeb

+0

@jeb -'% Var % '의 값에 따라 표시된 코드에있을 수 있습니다. – dbenham

+0

문제를 해결 한 대답을 수락해야합니다. – foxidrive

답변

5

앰퍼샌드가 이미 큰 따옴표로 이스케이프되었습니다. 그래서 더 이스케이프가 필요하고 성공하지 :

Endoro 이미 말했듯이
@echo OFF &SETLOCAL 
for /f "delims=&" %%i in (file) do echo %%i 
2

, 당신이 당신의 delims 사양 내에서 &을 탈출 할 필요가 없습니다.

"%Var%" 확장으로 인해 오류가 발생했을 수 있습니다. 값에 &과 같이 따옴표가 모두 포함되어 확장 후 &이 따옴표로 묶이지 않는 경우 정확하게 얻을 수있는 오류입니다. 명령문의 따옴표는 값 내에서 따옴표로 취소 할 수 있습니다.

당신은 아마

setlocal enableDelayedExpansion 
FOR /F "tokens=1,2 delims=&" %%A IN ("!Var!") DO (... 

하지만 당신의 가치는 !을 포함하는 경우, 당신은 당신이 당신이 확장하기 전에 지연 확장을 해제 할 필요가 지연 확장

을 사용하여 문제를 해결할 수있는 당신의 변수, 그렇지 않으면 확장 값이 될 것입니다 타락했다.

setlocal enableDelayedExpansion 
FOR /F "tokens=1,2 delims=&" %%A IN ("!Var!") DO (
    endlocal 
    ... 
)