2012-10-22 2 views
5

배치를 사용하여 텍스트 파일에서 각 행을 읽으려고합니다.배치를 사용하여 파일에서 공백이있는 행을 읽습니다.

파일 내의 라인 일부 공백 있고, 그래서 상기 입력의 예이다 :

This is the first line 
This is the second line 
... 

제가

FOR /f %%a in ("%1") do (
    @echo %%a 
) 
goto:eof 

출력은 다음과 같은 소스 코드를 사용하고 다음 :

This 
This 
... 

나는 스택 오버플로 항목을 lulling하지만 내 문제를 해결하지 않습니다. Batch : read lines from a file having spaces in its path

+0

'% 1'이 (가) 파일 이름이라고 가정하면 게시 된 코드는 설명대로 작동하지 않습니다. 당신은''usebackq ''옵션을 사용해야 만한다. 그렇지 않으면 IN() 절을 인용해서는 안된다. – dbenham

답변

6

시도해보십시오.

FOR /f "tokens=* delims=," %%a in ('type "%1"') do (
    @echo %%a 
) 
+2

이제 코드는','의 첫 번째 발생시 각 줄을 잘라냅니다. – dbenham

2

당신은 배치 각 줄

FOR /f "delims=;" %%a in ("%1") do (
    @echo %%a 
) 

줄 끝의 기본 구분 기호 세미 콜론에까지 읽어 곳에 대한 구분 기호를 설정해야합니다. 또는 파일에서 볼 가능성이없는 문자 인 ~ 또는 ¬ 또는 무엇인가를 사용하십시오.

+0

구분 기호를 이상한 값으로 설정하는 이유는 무엇입니까? – jeb

+0

@jeb 어떻게 설정하지 않습니까? ' "delims ="'기본값으로 공간을 설정하겠습니까? –

+0

아니요, dbenham이 보여 주듯이, ""delims = "'아무것도 설정하지 마십시오. EOL 만이 방법으로 빈 값으로 설정할 수 없습니다." "EOL ="'은 EOL을 따옴표로 설정합니다. 그러나 EOL은 다른 방법으로 비어있을 수 있습니다. – jeb

3

발리 C와 헨리 가오 문제 주변.

FOR/F는 구분 된 토큰으로 문자열을 구문 분석하기 때문에 코드는 첫 번째 공백에서 값을 종료합니다. 기본 구분 기호는 공백과 탭입니다. DELIMS를 nothing으로 설정하여 전체 행을 보존 할 수 있습니다. FOR/F 루프가 빈 줄을 건너 뛰고, 또한 EOL 문자 (기본적으로 ;)로 시작하는 라인을 건너 뜁니다 :

for /f "usebackq delims=" %%a in ("%~1") do echo %%a 

는하지만 여전히 잠재적 인 문제입니다.

FOR 명령 (특히 FOR/F 변형)은 복잡한 짐승입니다. FOR 명령의 구석 구석에 대한 좋은 요약을 보려면 http://judago.webs.com/batchforloops.htm을 읽기를 권합니다.

+0

슬픔. 링크가 더 이상 작동하지 않습니다 .. –

관련 문제