Zweitletzte Zeile einer .txt in einer Batch anzeigen

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der FOR-Befehl wertet die Ausgabe des FINDSTR/N-Befehls aus. FINDSTR mit der Suchzeichenfolge "^" (als regulärer Ausdruck, ein einfacher Punkt geht auch) findet alle Zeilen in der Datei. Mit /N gibt es auch noch die zugehörige Zeilennummer aus.

Jetzt speichert es jede Zeile in die Variable "LetzteZeile". Bei jeder neuen Zeile wird jedoch der alte Wert der Variable "LetzteZeile" überschrieben, sodass letzten Endes nur die allerletzte Zeile gespeichert bleibt.

In dem FOR-Befehl sind allerdings zwei Fehler. Richtig lautet er

FOR /F "tokens=1,2 delims=:" %%i in ('findstr /n "^" "C:\Beispiel.txt') DO set LetzteZeile=%%j

Um eine beliebige Anzahl an Zeilen auszugeben, würde ich dieselbe Methode empfehlen. Allerdings muss man hierfür ermitteln, wie viele Zeilen die Datei hat. Deswegen muss man den FOR-Befehl zweimal nutzen.

set AnzahlAnzuzeigenderZeilen=5

FOR /F "tokens=1,2 delims=:" %%i in ('findstr /n "^" "C:\Beispiel.txt') DO set BisZeile=%%i

set /a AbZeile=%BisZeile% - %

AnzahlAnzuzeigenderZeilen% +1

FOR /F "tokens=1,2 delims=:" %%i in ('findstr /n "^" "C:\Beispiel.txt') DO if %%i GEQ %AbZeile% echo %%j

Mit der ersten Variable legst du fest, wie viele Zeilen angezeigt werden sollen. Hier habe ich mal "5" genommen. Der erste FOR-Befehl ermittelt, wie viele Zeilen die Zieldatei insgesamt hat. Der SET/A-Befehl errechnet die Zeilennummer, ab der geschrieben werden soll (z. B. bei 300 Zeilen gesamt ab Zeile 296 bis 300 = die 5 letzten Zeilen). Der zweite FOR-Befehl schreibt diese Zeilen.

Der IF-Befehl arbeitet im Sinne von "Wenn die aktuell ausgelesene Zeile größer oder gleich (Greater or EQual) %AbZeile% ist, schreib die Zeile".

Super ausführliche Antwort hat mir sehr weitergeholfen und funktioniert perfekt ^^ Vielen Dank :)

0

Du könntest eine vernünftige Shell benutzen, und dann einfach ...

tail -n2 datei.txt | head -n1

... schreiben.

Das gibt dir die zweitletzte Zeile aus. :)