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: