2012-06-20 3 views
0

Ok, atm 스크립트 여러 텍스트 파일의 값을 가져 오는 스크립트를 작성하고 있지만 파일을 단일 텍스트 파일로 결합하는 좋은 방법을 찾지 못하는 것 같습니다. 텍스트 파일에서Windows 일괄 고급 텍스트 찾기 기능

FOR /f "tokens=%toknum% delims=:" %%G in ('"find /v /c "" "%~dp0\!systype!Win7Updates.txt""') do set maxcnt=%%G 

: 나는 재료를 분리 할 수 ​​있도록 파일에 영역을 만드는 방법을 알아 내려고 노력하고 있어요

KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 

. 나는 제목을 찾으려고 노력하고 싶다. 제목 아래로 가면 아래에있는 모든 것이로드 될 것이다.

내가하려는 일의 예. (또한 CSV 파일에서 이렇게하려고) 그래서 나는 스크립트가 윈도우 비스타 패치 영역을 찾아 그 영역 아래에만로드합니다. 가능하면 누구나 알 수 있습니까?

:Windows 7 Patches 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 

:Windows Vista Patches 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart 

답변

1

귀하의 진술은 "로드 될 모든 것"이 명확하지 않습니다. 다음 제목까지 제목 아래의 모든 것을 의미한다고 가정합니다. 나는 정말로 당신이 "로드 된"것을 의미하는지 모르겠다 - 아마 그 라인들을 다른 파일에 추가 할 것인가? 이 솔루션을 위해 나는 단순히 선을 에코합니다.

테스트 케이스가 꽤 절름발이입니다. 섹션 내용이 동일하므로 코드가 제대로 작동하는지 알기가 어렵습니다. 더 이해하기 쉬운 테스트 케이스가 여기 있습니다. FOR 루프를 사용할 때 지연된 확장 문제를 설명하기 위해 일부 !자를 추가했습니다.

있는 test.txt 여기

:Windows 7 patches 
Windows 7 line 1! 
Windows 7 line 2! 
Windows 7 line 3! 

:Windows Vista patches 
Windows Vista line 1! 
Windows Vista line 2! 
Windows Vista line 3! 

:Windows XP patches 
Windows XP line 1! 
Windows XP line 2! 
Windows XP line 3! 

그냥 비스타 패치 섹션을 반향하는 배치 스크립트입니다. !을 보호하기 위해 루프 내에서 지연된 확장을 켜고 끕니다. 지연 확장이 설정된 경우 %% A의 확장이 제대로 작동하지 않습니다.

@echo off 
setlocal disableDelayedExpansion 
for /f "delims=:" %%N in ('findstr /n /c:":Windows Vista patches" test.txt') do set skip=%%N 
for /f "skip=%skip% delims=" %%A in (test.txt) do (
    set ln=%%A 
    setlocal enableDelayedExpansion 
    if "!ln:~0,1!"==":" (endlocal & goto :break) 
    endlocal 
    echo %%A 
) 
:break 

위의 해결 방법은 빈 줄을 제거합니다. 필요한 경우 빈 줄을 유지하는 트릭이 있습니다. 또한 기본 FOR/F "EOL"옵션으로 인해 ;으로 시작하는 모든 행을 제거합니다. 필요한 경우 다시이를 처리 할 수있는 트릭이 있습니다.

+0

"로딩"이 의미하는 것은 코드의 첫 번째 부분은 모든 정보를로드하는 방법 인 줄에서 스위치를 가져 오는 것을 보여줍니다. – user1451070

+0

@ user1451070 - 여전히 진흙으로 맑음. 귀하의 의견은 당신이 "라인에서 스위치를 얻는 중"이라고 말하며 여러 가지 방법으로 해석 할 수 있습니다. 귀하의 질문에있는 코드는 단순히 텍스트 파일의 줄 수를 계산합니다. 연결이 보이지 않습니다. 질문을 편집하여 예상 결과를 표시하십시오. – dbenham

+0

텍스트 파일에 쉼표로 구분 된 "스위치"가 있습니다 – user1451070