레이블이 배치파일인 게시물을 표시합니다. 모든 게시물 표시
레이블이 배치파일인 게시물을 표시합니다. 모든 게시물 표시

2017년 11월 23일 목요일

배치 파일 팁 - 빈 라인(Empty Line)을 포함하여 텍스트 파일 스캔하기

배치파일 안에서 다른 텍스트 파일의 내용을 열람할 수 있습니다.
텍스트 파일의 내용을 열람하려면 아래와 같이 합니다.

for /f "delims=" %%a in (test.txt) do echo.%%a

이렇게 하면 텍스트 파일내의 라인을 출력해줍니다.
예를들어 입력 테스트 파일이 아래와 같다고 하면


아래와 같이 출력됩니다.

이것의 문제는 입력 텍스트의 빈 줄(Empty Line)이 없어졌다는 거죠
그것 자체를 의도했을 수도 있지만 빈 줄 자체를 그대로 처리해야할 때도 있습니다.
이것을 위해서 위의 배치파일을 아래와 같이 수정합니다.

for /f "delims=" %%a in ('type test.txt') do echo.%%a

이것은 괄호안의 명령이 바뀌었습니다.
작은 따옴표를 사용해서 명령어를 만들고 그 실행결과를 줄단위로 파싱합니다.
이것의 결과는 앞에서와 같습니다.

for 명령어는 이처럼 명령어의 실행결과로 리턴되는 출력값을 줄단위로 처리할 수 있습니다.
자세한것은 for의 도움말을 참고하십시요.

for는 본질적으로 "빈 줄"을 처리할 수 없습니다. 그래서 빈 줄을 빈줄이 아닌것으로 가공합니다.
여러가지 도구를 사용할 수 있겠지만 여기서는 find 명령어를 사용합니다.
find 명령어를 사용해서 다음과 같이 입력하면 아래와 같이 결과가 나옵니다.

find /n /v "" test.txt

실행결과는 아래와 같습니다.

공백라인 앞에 [숫자]가 붙어서 확장되었습니다.
그런데 맨 위줄에 "---------- TEST.TXT"이 붙어 있습니다.
이것을 그대로 for문에 입력해 봅니다.

for /f "delims=" %%a in ('find /n /v "" test.txt') do echo.%%a

이것의 실행결과는 아래와 같이 됩니다.

역시 맨위줄에 "---------- TEST.TXT"이 나타나게 됩니다.
맨 위줄에 나오는 "---------- TEST.TXT"를 제거해야 합니다.
방법은 find 명령어에 직접 파일을 지정하지않고 파이프로 사용하는것입니다.
우선 type 명령어로 파일내용을 열람하고 그것을 파이프를 통해서 find에 전달합니다.

for /f "delims=" %%a in ('type test.txt ^| find /n /v ""') do echo.%%a

이것의 실행결과는 아래와 같습니다.