2012-06-09 3 views
3

일괄 처리에서 특수 문자가있는 파일을 읽고 구문 분석하려면 어떻게해야합니까? 나는이 그냥 foo!!!bar에있는 test.txt라는 텍스트 파일 및 배치 파일이 : 내가 원하는 그것은 어떻게 든 출력 foo!!!bar에 기대일괄 처리에서 특수 문자가있는 파일 읽기

@echo off 
setlocal enabledelayedexpansion enableextensions 

FOR /F "tokens=* delims=" %%a IN (.\test.txt) DO (
    echo Unquoted is %%a 
    echo Quoted is "%%a" 
    set "myVar=%%a" 
    echo myVar is still !myVar! or "!myVar!" 
) 
exit /b 0 

을하지만,이 출력 : 코스 I의

Unquoted is foobar 
Quoted is "foobar" 
myVar is still foobar or "foobar" 

그냥 type test.txt 일 수는 있지만 파일의 각 줄을 처리하고 싶습니다.

답변

5

문제는 배치 파서의 부작용이며 단계입니다.

FOR 매개 변수는 지연된 확장 단계가 확장되기 직전에 확장됩니다.
%%afoo!!bar 일 때 !!은 유효한 변수 확장이 아니므로 지연 확장은 느낌표를 제거합니다.

%%a 확장은 지연 확장을 사용하지 않는 경우에만 안전하므로 지연된 확장을 토글해야합니다. 내가 파일에 내용을 쓸 수 있지만 점점 오류가 저를 도와주세요 전에

@echo off 
setlocal DisableDelayedExpansion enableextensions 

FOR /F "tokens=* delims=" %%a IN (.\test.txt) DO (
    echo Unquoted is %%a 
    echo Quoted is "%%a" 
    set "myVar=%%a" 

    setlocal enabledelayedexpansion 
    echo myVar is still !myVar! or "!myVar!" 
    endlocal 
) 

또한 내가 같은 토글을 사용하는 내 경우에는 How does the CMD.EXE parse...

+0

볼 수 있었다 – CIPHER

관련 문제