Раздел справки What topics can I ask about here? должен быть всегда прочитан первым, прежде чем оставлять вопрос. Сообщество Stack Overflow не предназначено для выполнения всего задания программирования для других. Похоже, вы не приложили никаких усилий для кодирования командного файла для своей задачи самостоятельно.
Но вам повезло, поскольку мне было интересно найти 1 или более строк в текстовом файле и скопировать найденные строки, а также одну или несколько строк под каждой найденной строкой в другой текстовый файл, используя только стандартные команды и приложений Windows.
Обычно я выполняю такие задачи с помощью текстового редактора UltraEdit с его мощным движком регулярных выражений Perl и поддержкой сценариев и никогда бы не пришел к идее использовать командный файл для захвата строк из текстового файла и сохранения их в другом текстовом файле ,
Это общее командное решение с пояснительными комментариями для копирования найденных строк и от 2 до N (см. LineCount) последовательные строки под каждой найденной строкой из одного текстового файла в другой текстовый файл.
@echo off
setlocal EnableDelayedExpansion
rem Define the regular expression search string.
set "SearchExpression=When.*India.*Independence"
rem Define names of input and output file with full path.
set "ResultFile=C:\Temp\Result.txt"
set "SourceFile=C:\Temp\Example.txt"
rem Delete existing output file from a previous execution.
if exist "%ResultFile%" del "%ResultFile%"
rem Run a regular expression search in input file using standard Windows
rem console application FINDSTR with getting output also the line number
rem of the line with a positive match at beginning of the output line
rem and separated from the found line with a colon. Of interest in this
rem first loop is only the line number being processed in subroutine.
for /F "tokens=1 delims=:" %%N in ('%SystemRoot%\System32\findstr.exe /R /N "%SearchExpression%" "%SourceFile%"') do (
set SkipLines=%%N
call :CopyLines
)
endlocal
goto :EOF
rem Subroutine to copy from input file the line with the positive match
rem of the regular expression search and also the next line in the file.
:CopyLines
rem Determine the number of lines to copy from input file to output file.
set LineCount=2
set SkipOption=
rem Skip all lines above the found line.
set /A SkipLines-=1
rem Option skip with value 0 results in a syntax error message.
rem Therefore define option skip only with a value greater 0.
if not "%SkipLines%" == "0" set "SkipOption=skip=%SkipLines% "
rem Copy LineCount lines starting from SkipLines+1 line to output file.
for /F "usebackq %SkipOption%delims=" %%L in ("%SourceFile%") do (
echo %%L>>"%ResultFile%"
set /A LineCount-=1
if "!LineCount!" == "0" goto :EOF
)
А вот еще один пакетный файл без комментариев, оптимизированных для копирования только каждой найденной строки и ниже линии от входа до вывода текстового файла.
@echo off
setlocal EnableDelayedExpansion
set "SearchExpression=When.*India.*Independence"
set "ResultFile=C:\Temp\Result.txt"
set "SourceFile=C:\Temp\Example.txt"
if exist "%ResultFile%" del "%ResultFile%"
for /F "tokens=1,2* delims=:" %%N in ('%SystemRoot%\System32\findstr.exe /R /N "%SearchExpression%" "%SourceFile%"') do (
set SkipLines=%%N
echo %%O>>"%ResultFile%"
call :CopyNextLine
)
endlocal
goto :EOF
:CopyNextLine
for /F "usebackq skip=%SkipLines% delims=" %%L in ("%SourceFile%") do (
echo %%L>>"%ResultFile%"
goto :EOF
)
следующие линии? – npocmaka
Вопрос и ответ являются последовательными. Однако после каждого набора есть пробел. В каждом наборе есть вопросительный тег и ответ, как указано выше. – blah
Я отредактировал ваш вопрос для ясности. Если вы не согласны, откажитесь от редактирования. – indiv