Извлечь строку под критериями Findstr в пакетном файле для цикла

Я пытаюсь извлечь из набора текстовых файлов строку, расположенную на 2 строки ниже строки, соответствующей критериям поиска, и перенаправить вывод в файл csv.

Мне удалось сделать это для определенного текстового файла в наборе, но у меня возникают проблемы с написанием цикла For для пакетного сканирования каждого текстового файла в заданной папке.

Через этот я написал следующий код для сканирования определенного файла. Он отлично работает:

setlocal EnableDelayedExpansion
cd "myFolder"
if exist myOutput.csv del myOutput.csv

for /F "delims=:" %%A in ('findstr /B /N /C:"myCriteria" "myFile.txt"') do (
set /A LineBelow=%%A+2
set "LineBelow=!LineBelow!: "
)
(for /F "tokens=1* delims=:" %%A in ('findstr /N "^" "myFile.txt" ^| findstr /B "%LineBelow%"') do ^
echo %%B>>myOutput.csv)

start myOutput.csv

ENDLOCAL

Когда я попытался обобщить код в For Cycle для сканирования каждого txt в myFolder, я получил ошибку в Findstr: !LineBelow! получается пустая переменная...

Вот ошибочный For Cycle:

setlocal EnableDelayedExpansion
cd "myFolder"
if exist myOutput.csv del myOutput.csv

for %%F IN ("*.txt") do (
(
for /F "delims=:" %%A in ('findstr /B /N /C:"myCriteria" "%%F"') do (
set /A LineBelow=%%A+2
set "LineBelow=!LineBelow!: "
))
(for /F "tokens=1* delims=:" %%A in ('findstr /N "^" "%%F" ^| findstr /B "!LineBelow!"') do ^
echo %%B>>myOutput.csv))

start myOutput.csv

ENDLOCAL

Может ли кто-нибудь помочь мне в исправлении этого кода? Спасибо


person MarBert    schedule 01.12.2014    source источник


Ответы (1)


@echo off
    setlocal enableextensions enabledelayedexpansion

    cd "myFolder"

    > myOutput.csv (
        for /f "tokens=1,2 delims=:" %%a in ('
            findstr  /b /n /c:"myCriteria" *.txt
        ') do (
            set /a "line=%%b+2"
            for /f "tokens=1,* delims=:" %%c in ('
                findstr /n "^" "%%a" ^| findstr /b /c:"!line!:" 2^>nul
            ') do echo(%%d
        )
    )

При этом используется findstr для прямого перечисления всех строк, соответствующих myCriteria, и включения в вывод имени файла (%%a) и номера строки (%%b). Эта информация используется для извлечения последней строки (%%d) из соответствующих файлов.

person MC ND    schedule 02.12.2014