findstr: Die Zeile darüber ausgeben

Manchmal hat man Probleme ähnlich wie dieses hier: Man möchte nicht die gesuchte Zeile in einer Datei ausgeben, sondern die Zeile darüber. Und das Ganze soll mit einem Batch-Skript ausgeführt werden. Für dieses Problem habe ich mir einer Testdatei erstellt, die in etwas so aussieht:

123
abc
234
qwe
345
qwe
456
abc

Alle Zeilen, die über dem gesuchten String abc stehen, sollen ausgegeben werden, also

123
456

Das habe ich anschließend in einem Batch-Skript realisiert. Ich hoffe, die Kommentare hierfür sind ausreichend:

@echo off
SetLocal EnableDelayedExpansion

rem set initial values for the variables
set index=0
set "previous_line="
set "current_line="

rem Iterate over file, line by line
For /F "tokens=*" %%L in (array_data2.txt) do (
set "previous_line=!current_line!"
set "current_line=%%L"

rem check if current line has searched
string echo %%L| findstr /C:"abc" > nul

rem if it has searched string, print previous
rem and current line
if not errorlevel 1 (
echo !index!: !previous_line!
set /a "curr_index=index+1"
echo !curr_index!: !current_line!
echo.
)

rem add 1 to the index
set /a "index=index+1"
)

Quellen:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.