Windows 2003 Shell Scripting

Scripts zur System- und Dateiverwaltung

GetLine - Bestimmtes finden

Um eine Datei zu nummerieren, bietet die Shell eine Möglichkeit über das Kommando find. Wir suchen nach einem String, der nicht in der Datei vorkommt, und geben alle nicht übereinstimmenden Zeilen nummeriert aus. Die Ausgabe erfolgt in der Form [<nr>]<originalzeile>.

Diese Ausgabe muss nun so aufbereitet werden, dass die Nummer der Zeile mit der als Parameter übergebenen Nummer verglichen wird. Dazu wird mithilfe einer for-Schleife die Ausgabe der Suche pro Zeile an der schließenden eckigen Klammer aufgeteilt und das erste „Wort“ (die öffnende eckige Klammer und die Nummer der Zeile) für den Vergleich benutzt. Das zweite „Wort“ enthält aufgrund der Definition tokens=1,* den gesamten Rest, also die originale Textzeile. Bei der Übereinstimmung mit der gesuchten Zeilennummer wird die originale Zeile ausgegeben.

Um die Erzeugung einer Zwischendatei zu vermeiden, verwenden wir an dieser Stelle das sogenannte Backquoting. Damit kann das Ergebnis der Suche mit find direkt in die for-Schleife eingesetzt werden. Für jede Zeile wird dann in der if-Abfrage der Vergleich auf die passende Zeilennummer ausgeführt. Im Erfolgsfall wird die Zeile ausgegeben. Wird als Zeilennummer eine Nummer angegeben, die größer ist als die Anzahl der Zeilen im Dokument oder eine negative Zahl darstellt, erfolgt keine Ausgabe.

Parameter

  • %1 = Nummer der zu lesenden Zeile

  • %2 = Name der Datei (optional mit Pfad)

Code

Hinweis: Die zweite Zeile ist eine einzelne logische Zeile und wird drucktechnisch bedingt umbrochen.

@echo off
if x%1 == x goto usage
if x%2 == x goto usage
for /F "delims=] usebackq tokens=1,*" %%f in (`find /v /n "@@@@" ^< %2`) do if [%1] == %%f] echo %%g
goto :eof
:usage
echo Aufruf: %0 [zeile] [datei]