Benutzer:Azaël/ Versuch Batch-Variablen

Variablen

Bearbeiten

Wie in den meisten Programmiersprachen, so sind auch in Batch Variablen für viele Aufgabenstellungen unerlässlich. Batch-Variablen sind   variant, d.h. es gibt nicht verschiedene Variablen-Typen (z. B. Ganzzahlen, Gleitkommazahlen, Zeichen, ...), sondern der Inhalt einer Variable wird erst einem bestimmten Typ zugeordnet, wenn damit gearbeitet werden soll.

Jede Batchdatei, aber auch jede geöffnete Instanz von CMD.exe, stellt eine so genannte Umgebung dar. Diese Umgebung beinhaltet auch einen Satz von   Umgebungsvariablen, die dort gültig sind.

Variablen in Batch heißen also Umgebungsvariablen.

Umgebungsvariablen können verschiedenen Ursprungs sein, sie haben jedoch alle eins gemeinsam: Eine Umgebung "erbt" ihre Variablen von der Umgebung, von der sie aufgerufen bzw. erzeugt wurde. Das heißt eine in einer Batch-Datei erzeugte oder geänderte Variable wird genau so in jeder Umgebung vorhanden sein, die von da aus geöffnet wird. Aber: Vererbt wird nur eine Kopie der Variablen. Wird in einer untergeordneten Umgebung eine Variable gesetzt oder verändert, so hat dies keine Auswirkungen auf übergeordnete Umgebungen.

Ein bestimmter Satz von Umgebungsvariablen ist in jeder Umgebung vorhanden (systemweit), so z.B. TMP, TEMP, HOMEDRIVE und HOMEPATH, denn sie werden immer erzeugt, wenn CMD.exe gestartet wird, und von da an weiter vererbt.

Desweiteren gibt es dynamische Variablen, deren Wert erst kurz vor der Ausgabe ermittelt wird. Dazu gehören DATE, TIME, ERRORLEVEL und RANDOM (eine Zufallszahl).

Als Drittes sind die Parameter zu nennen, die ebenfalls Variablen sind: Über %1, %2 etc. lassen sich die der aktuellen Umgebung beim Start übergebenen Parameter ansprechen, genau wie normale Variablen (mit einer Ausnahme, siehe weiter unten). Deshalb können (in Batch-Dateien) keine Zahlen als Variablennamen vergeben werden.

Variablen werden mit dem Befehl SET angezeigt, angelegt und verändert. SET ohne Parameter zeigt alle vorhandenen Umgebungsvariablen an, wenn man noch nichts verändert hat sind das nur die Systemweiten. Die dynamischen Variablen sind in dieser Liste nicht vorhanden.

Will man eine Variable ändern, so schreibt man:

SET Variablenname=Variablenwert

Variablennamen sind übrigens wie auch z. B. Befehls- und Dateinamen case-insensitiv, es wird also nicht nach Groß- und Kleinschreibung unterschieden.

SETLOCAL fehlt

ENDLOCAL fehlt

Wie verwendet man nun Variablen?

Wenn CMD eine Batch-Datei auswertet, so geschieht dies zeilenweise. Dabei wird (vor allem Anderen!) nach verwendeten Variablen gesucht, und diese durch ihren Wert ersetzt. Aus

ECHO %date%

macht der Kommandozeileninterpreter also z. B.

ECHO 17.10.2008

und gibt dann

17.10.2008

aus. Dabei sieht man gleich: Variablen werden innerhalb von Prozent-Zeichen angegeben. Anderenfalls erkennt CMD nicht, dass es sich um eine Variable handeln soll. Beispielsweise werden

ECHO date
ECHO %date
ECHO date%

als Zeichenketten interpretiert, und die Ausgabe lautet:

date
%date
date%

Eine Ausnahme davon bilden die Parameter: Dort wird sowohl als %1 als auch %1% akzeptiert.

Verwendung von Variablen mit IF

Verwendung von Variablen bei FOR

Ab Windows NT lassen sich auch recht einfach Teile von Variablen auslesen, siehe unter Stringmanipulation. Das funktioniert nicht mit Parametern, dafür geht mit denen etwas Anderes: Dort ist beschrieben, wie sich einzelne Parameter erweitern lassen.