Windows 2003 Shell Scripting

Scripts zur System- und Dateiverwaltung

Delete - Löschen von Zeilen

Dieses Shell Script durchläuft die angegebene Datei in einer for-Schleife und zählt in einer Umgebungsvariablen (line) die Anzahl der vorher durchlaufenen Zeilen mit. Alle Zeilen, bis auf diejenige mit der Nummer, die dem zweiten Parameter beim Aufruf entspricht, werden ausgegeben.

Da im Befehlsteil der Schleife als erster Parameter die Nummer der zu löschenden Zeile übergeben wird und danach der Inhalt der Zeile (in Anführungszeichen, falls Leerzeichen enthalten sind), erfolgt nach der Sprungmarke :procline eine Überprüfung mit if auf den Parameter Nummer eins (%1). Solche Konstruktionen kommen in Batches öfter vor, daher sollten Sie immer wissen, ob die Abarbeitung an dieser Stelle im normalen Ablauf stattfindet oder wie hier über einen internen Aufruf per call :label.

Da der Inhalt der Zeile in Anführungszeichen übergeben wurde, wird bei echo die Konstruktion %~2 gewählt, mit der die umschließenden Anführungszeichen wieder entfernt werden.

Als Designalternative haben wir hier die Ausgabe der Datei nach dem Löschen der angegebenen Zeile auf die Standardausgabe gelenkt. Dies hat den Vorteil, dass der Benutzer des Scripts völlig frei in der Verwendung der Ausgabe ist. Diese kann direkt auf die Konsole gehen oder aber mithilfe der Umleitungssymbole oder per Piping an andere Programme oder Dateien übergeben werden. So bleibt das Script flexibel, und die Anzahl der notwendigen Parameter wird minimiert.

Parameter

  • %1 = Name der Datei, aus der eine Zeile gelöscht werden soll

  • %2 = Nummer der zu löschenden Zeile (beginnt bei 1)

Code

@echo off
if !%1 == ! goto err
if !%2 == ! goto err
set line=0
for /F "usebackq" %%f in (%1) do call :procline %2 "%%f"
goto :eof
:err
echo Usage: %0 [file] [line#]
echo.
echo Deletes line number # from the file and writes
echo the result to StdOut
goto :eof
:procline
set /a line="line+1"
if not %line% EQU %1 echo %~2