Batch, CMD Scripting Grundlagen unter Windows Tutorial Teil3 - CMD Befehle Übersicht

Erstellen einer Batch Script Datei

Da wir nun mit den elementaren dingen der Navigation vertraut sind, können wir nun unser erstes kleines Batch Script schreiben.
Wir erstellen uns eine neue Datei namens Project1.cmd im Verzeichnis C:\Test. Wir können die Datei per Konsole erstellen oder mit dem Windows Explorer.
Die Dateiendung .cmd oder .bat ist dabei sehr wichtig. Durch diese Dateiendung wird das Betriebssystem darüber informiert, wie die Datei zu behandeln ist.

Jede Datei wird mit der zur Dateiendung verknüpften Anwendung geöffnet. Starten wir eine Datei mit der Endung .cmd durch Doppelklick, weiß das Betriebssystem dass dies eine Stapelverarbeitungsdatei ist, welche per Kommandozeileninterpreter auszuführen ist.

Je nach Betriebssystem kann man die Dateiendung nicht sehen, diese muss dann separat eingeschaltet werden. Am besten wir machen einen Rechtsklick in den Ordner C:\Test und erstellen eine neue Textdatei, diese hat dann die Dateiendung .txt.
Durch Rechtsklick und „Umbenennen“ ersetzen wir die Dateiendung .txt mit .cmd.
Wichtig zur Ansicht der Dateiendung ist dass die Option „Erweiterung bei bekannten Dateitypen ausblenden“ nicht aktiviert ist. Teileweise kann man die Dateierweiterungen auch im Explorer unter „Ansicht“ und ein Häkchen bei „Dateinamenerweiterungen“ einschalten.
Sobald wir damit fertig sind, sollten wir eine Datei haben die so aussieht:

Wir haben nun also eine leere Datei namens Project1.cmd, und damit wir diese Datei auch bearbeiten können, machen wir einen Rechtsklick auf die Datei und wählen „Bearbeiten“ aus.
Ein Doppelklick auf die Datei, würde die Datei sofort ausführen.

Die Datei sollte Standardmäßig im Notepad zur Bearbeitung geöffnet werden. Wer einen komfortableren Editor zur Bearbeitung von Batch oder anderen Textdateien sucht, sollte sich Notepad++ einmal genauer ansehen.

Unser erstes Batch Script

Abb1

Nach dem die Datei nun offen ist, gebt einmal folgende Zeilen wie in Abbildung Abb1 zusehen ein.
Nachdem die Dateien dann  über Datei -> Speichern gespeichert wurde, kann man diese dann mit einem Doppelklick starten.

Abb2

Der Befehl echo wurde im vorherigen Tutorial ja schon angesprochen, der Befehl pause ist neu. Der Befehl pause unterbricht die Stapelverarbeitung und wartet im Code auf eine beliebige Taste bevor die Script Datei weiter ausgeführt wird. In diesem Fall brauchen wir den Befehl da die Konsole nach der Ausführung von echo Mein erstes Batch Script sich sofort schließen würde, alles ginge so schnell dass wir die Ausgabe in der Konsole nicht sehen könnten. Die Ausgabe sollte wie in Abb2 aussehen.

Wir sehen dass in der Befehlsausgabe in der Konsole nicht nur die Resultate eines Befehls angezeigt werden, sondern auch der Befehl selbst.
Dieses Verhalten kann das Lesen in der Ausgabe sehr unübersichtlich machen, hat aber seine Berechtigung. Als erstes schauen wir uns an wie wir die Ausgabe ein wenig übersichtlicher machen können.
Wir erweitern unser Beispiel folgendermaßen:

Und die Ausgabe verändert sich wie in Abbildung Abb2 zu sehen.

Echo off verhindert die Ausgabe der Befehle in der Konsole, das @ Zeichen vor echo off, verhindert dass auch der Befehl echo off ausgegeben wird.

Wer allerdings eine Batch Datei neu aufbaut sollte echo off aber erst ganz zum Schluss einbauen.
Auch wer in einer Batch Datei Fehler sucht, da sich die Datei unerwartet verhält sollte echo off nicht verwenden. Zur Fehlersuche in Batchdateien brauchen wir alle Ausgaben in der Konsole um das Verhalten besser nachvollziehen zu können.

Hiermit sind wir auch schon bei unserem nächsten Befehl rem.

Hinweis:
Es empfiehlt sich auch in Batch Scripts eine kleine interne Dokumentation zu verwenden.
Es spielt vielleicht in kleinen übersichtlichen Scripts keine Rolle, aber in Scripts welche über viele Zeilen und Sprungmarken verfügen, ist eine interne kurze Beschreibung sehr wichtig.

Der rem Befehl kann hierfür verwendet werden. Der rem Befehl und alles was nach ihm folgt wird von der Stapelverarbeitung ignoriert. Als Ersatz können auch 2 Doppelpunkte verwendet werden.

Möchten wir nun die Befehlsausgabe und Befehle wieder sehen, müssen wir nicht die ganze Zeile mit @echo off entfernen, wir verwenden einfach ein rem um den Befehl kurzfristig zu deaktivieren.

Wir machen uns also die Eigenschaft zunutze dass alles nach dem rem nicht verarbeitet wird.

Auf Benutzereingaben reagieren

Nachdem wir nun die Ausgabe kontrollieren können, möchte ich euch zeigen wie man per Batch Script auch auf Benutzereingaben reagieren kann. Dafür gibt es den Befehl choice. Mi Hilfe dieses Befehls werden wir uns ein kleines Menü bauen und auf Benutzereingaben warten.
Ohne zusätzliche Parameter erwartet der Choice Befehl ein J für Ja oder ein N für Nein, andere Benutzereingaben werden ignoriert.

Hinweis:
Sollt man einmal in einem Script feststecken welches sich nicht abbrechen lassen möchte, kann man das mit der Tastenkombination CTRL und C tun. Mit dieser Tastenkombination werden Scripts während es Ablaufs abgebrochen. Auf Deutschen Tastaturen habt ihr vermutlich die Taste STRG und C. Die Tasten müssen gleichzeitig gedrückt werden.

Die Frage ist jetzt natürlich, wie finde ich heraus was für eine Taste gedrückt wurde?
Dafür prüft man auf einen sogenannten „ERRORLEVEL“ dieser ERRORLEVEL enthält das Ergebnis der letzten aufgerufenen Aktion. Erfolgreich ausgeführte Aktionen geben normalerweise eine 0 zurück.
Uns interessiert aber was zurück gegeben wird wenn ein Benutzer J oder N gedrückt hat.

Wir ändern unser kleines Script ab und beginnen mit unserem Auswahlmenu Script:

In dem Beispiel oben, benutzen wir auch unsere erste Variable %errorlevel%
auf Variablen werden wir später noch näher eingehen.

Durch die Variable %errorlevel% haben wir eine Möglichkeit auf den Rückgabewert einer Aktion zuzugreifen. Wenn also der Befehl choice auf eine Benutzereingabe wartet, und diese dann auch erfolgt, wird das Ergebnis dieser Aktion in der Variable %errorlevel% abgespeichert.

Damit wir aber auch erfahren was darin abgespeichert wurde, lassen wir uns den Inhalt dieser Variable ausgeben. Das machen wir wieder mit echo. Durch die Prozent Zeichen am Anfang und Ende der Variable, weiß das System dass wir nicht mit dem Bezeichner errorlevel arbeiten wollen sondern dass er sich dabei um eine Variable handelt und wir den Inhalt sehen möchten.

Führen wir die Datei durch Doppelklick aus, und wählen entweder J oder N bekommen wir jeweils unterschiedliche Rückgabewerte angezeigt. Bei mir ist es 1 für J und 2 für N, mit diesem Wissen können wir nun weiterarbeiten.

Was wir nun benötigen, ist ein Befehl mit welchem wir auf diese unterschiedlichen Rückgabewerte reagieren können, der Befehl dafür heißt IF. Der IF Befehl hat verschiedene Möglichkeiten um auf Gleichheit, Ungleichheit, größer oder kleiner prüfen zu können. Ein Blick in die Hilfe durch

wäre also nicht schlecht.

In der Hilfe sehen wir dass wir mit dem Operator EQU auf Gleichheit prüfen können.
Wir möchten prüfen ob der Benutzer J oder N gedrückt hat, in der Variable %errorlevel% wird 1 für J und 2 für N abgespeichert. Unser Vegleich lautet also:

Ist Variable gleich 1 dann mach etwas ………..

Unser vollständiger Script kann so aussehen:

Sprungmarken und GOTO

Etwas störend in unserem Script ist jetzt noch die Tatsache dass wir nach jedem Betätigen der Taste das Script durch Doppelklick neu starten müssen.
Eine andere Möglichkeit das Script zu starten wäre der Weg über die Kommandozeile, dazu öffnet man eine neue Kommandozeile, und Startet das Script einfach durch den Namen des Scrpts.

Oder einfach nur Project1.cmd wenn man sich schon im Pfad C:\Test befindet.

Zurück zu unserem Problem dass das Script immer wieder neu gestartet werden muss. Wir benötigen eine Möglichkeit um nach der Benutzereingabe und dem pause Befehl nicht aus dem Programm zu fliegen, sondern wieder an den Anfang der Abfrage zu gelangen.

Der Befehl zum springen heißt goto. Der Befehl benötigt jetzt noch ein Sprungziel, die Stapelverarbeitung springt dann zum angegebenen Ziel und fährt an dieser Stelle fort.
Wir definieren ein neues Sprungziel mit einem Doppelpunkt und einem Bezeichner den wir selbst bestimmen können, hier im Beispiel verwenden wir z.B. :Start
Wir könnten aber genauso gut :StarteWieder oder :ABCD nehmen, ein Bezeichner für ein Sprungziel muss aber Eindeutig sein.

Wie wir im Script sehen können, springt die Stapelverarbeitung nach dem pause Befehl mit goto zu unserer Spungmarke Start, und die Abfrage beginnt wieder von vorne.
Um jedes Mal ein leeres Konsolenfenster zu bekommen, verwenden wir noch den Befehl CLS.

Ende Teil 3

Teile:
Batch, CMD Scripting Grundlagen unter Windows Tutorial Teil1
Batch, CMD Scripting Grundlagen unter Windows Tutorial Teil2
Batch, CMD Scripting Grundlagen unter Windows Tutorial Teil3
Batch, CMD Scripting Grundlagen unter Windows Tutorial Teil4

 

Beitrag kommentieren

Bitte verfasse einen Kommentar.

Dein Kommentar wird vor der Freischaltung von einem Admin moderiert.