2013-01-15 5 views
1

나는 n 개의 행을 가진 텍스트 파일을 가지고있다. m 개의 행에 관심이있는 문자열이 들어 있습니다 (m < = n). 새 텍스트 파일에 문자열이 포함 된 단일 행 (예 : 첫 번째 행) 만 복사하는 배치 파일이 필요합니다. findstr 명령을 사용하면 문자열이 들어있는 모든 행이 복사됩니다.하나의 텍스트 파일에서 하나의 문자열 인스턴스를 새 텍스트 파일로 복사하는 방법은 무엇입니까?

감사합니다. 폴 Safier

답변

1

는 m 행의 위치를 ​​당신의 FINDSTR 명령

findstr "search" "fileName.txt" 

는 당신은 FOR/F와 해당 명령의 결과를 처리 할 수 ​​있습니다 (이 간단하거나 필요한만큼 복잡 할 수)을 감안할 때 고리. GOTO를 사용하여 첫 번째 일치하는 줄 다음에 루프를 빠져 나올 수 있습니다.

for /f "delims=" %%A in ('findstr "search" "fileName.txt"') do (
    echo %%A >>"outFile.txt" 
    goto :break 
) 
:break 

FOR 명령은 일괄 처리에 사용할 수있는보다 복잡한 명령 중 하나입니다. 많은 옵션이 있습니다. 명령 프롬프트에서 HELP FOR 또는 FOR /?을 입력하여 명령에 대한 도움말을 볼 수 있습니다.

"DELIMS ="옵션은 토큰으로의 구문 분석을 비활성화합니다. 이 옵션이 없으면 FOR/F는 공백이나 탭 문자로 구분 된 각 줄을 토큰으로 나눕니다. 구분 기호 목록은 다른 caracter (들)로 설정하거나, 귀하의 경우에는 아무것도 설정하지 않을 수 있습니다.

위의 코드는 FOR/F가 EOL 문자로 시작하는 모든 줄 (기본적으로 ;)을 건너 뛰기 때문에 ;으로 시작하는 줄을 건너 뜁니다. EOL 문자를 하나의 문자로 변경할 수 있습니다. 그러나 일치하는 라인이 무엇부터 시작해야할지 모르면 EOL에 사용할 문자를 모를 수 있습니다. 모든 토큰 구문 분석과 EOL 줄 건너 뛰기를 완전히 비활성화하는 구문은 홀수입니다.

for /f delims^=^ eol^= %%A in (...) do ... 
+0

dbenham : 완벽하게 작동하는 것 같습니다! 감사! Paul Safier –

+0

@PaulSafier - 문제를 완전히 풀어 준 답을 얻은 경우 왼쪽 상단 근처의 체크 표시를 클릭하여 문제를 해결해야합니다. 그 행동은 다른 사람들이 질문에 대한 답변을 받았는지, 평판 포인트 2 점을 주 었는지, 그리고 답변 포스터 15 점을 수여했는지를 알 수있게합니다. 주어진 질문에 대해 오직 1 개의 대답만을 받아 들일 수 있습니다. 15 점에 도달하면 답변을 높일 수 있습니다. 상향 투표 결과는 응답자 10 점입니다. 당신은 다른 사람들의 질문에 대한 답변조차도 유용한만큼 많은 답변을 투표에 올릴 수 있습니다. – dbenham

+0

완료. 감사. - 폴 사피어. –

관련 문제