Teil 1: Allgemeine Problemstellungen

Shell Scripting unter Windows

Speichern von Zusatzdaten

Für viele Batches (auch die aus dem Abschnitt „Ausgabezeilen verändern“) werden Zusatzdaten in Form von Rechnernamen, Listen von Attributen und andere Dinge benötigt. Eine Möglichkeit, diese anzugeben, ist die Kommandozeile. Damit muss aber jedes Mal der gesamte Satz an Daten über die Kommandozeile angegeben werden (und ich kenne keinen Admin, der gerne mehr als nötig tippt). Als Ausweg bietet sich an, die Daten in einer INI-Datei, hostlist.txt oder Ähnlichem zu speichern und sie später einzulesen. Dieser Ansatz ist prinzipiell nicht schlecht, erfordert für die Ausführung und die Weitergabe des Shell Scripts aber immer beide Dateien. Eine dritte Möglichkeit ist die Unterbringung der Parameter direkt in der Batchdatei.

Diese Daten werden dann in der Batchdatei gesucht (mit find, findstr, grep.) und per Kommandoersetzung (Backquoting) verarbeitet. Dazu werden die Zeilen mit den Daten als Kommentar und mit einer definierten Kennung markiert.

Das nachfolgende Listing zeigt noch einmal den ersten Teil des Scripts über die Veränderung der Ausgabezeilen, nur sind diesmal die Namen nicht direkt in der Schleife enthalten, sondern als Kommentar, der dann in der Schleife per Backquoting ausgelesen wird.

@echo off

::.item silicony
::.item bytebag
::.item 192.168.229.11

setlocal
for /F "usebackq tokens=2" %%f in (`findstr "^::.item"
%~f0`) do call :check %%f
endlocal
goto :eof

:check
:: hier die verarbeitung (s. "Ausgabezeilen verändern")

Einige Leser werden jetzt einwenden, dass dabei nichts gewonnen ist. Die Lesbarkeit und die Änderung der Daten ist mit diesem Ansatz aber deutlich besser. Spätestens dann, wenn diese Daten innerhalb des Batches nochmals irgendwo benötigt werden, liegen sie hier nur einmal in der Datei und müssen auch nur einmal gewartet werden. Zudem kann die Liste über die Shell Scripts aus dem kommenden Kapitel „Dateiverwaltung“ oder andere Programme auch geändert, ergänzt oder gelöscht werden. Dies ist bei einem direkten Eintrag in die Schleife nicht möglich.