3 Programmieren mit VBScript

Windows Scripting lernen ISBN 3-8273-2019-4

In diesem Kapitel werden die Grundlagen für das Programmieren mit Lernziel VBScript vermittelt. Dazu gehören die grundlegenden Regeln, die beim Erstellen von VBScript-Code notwendig sind, sowie das Arbeiten mit Konstanten und Variablen. Anschließend wird die Verwendung von Be- dingungen und Schleifen besprochen, mit denen der Ablauf des Skripts gesteuert werden kann. Weiterhin geht es um eingebaute Funktionen und selbst definierte Unterroutinen. Am Ende wird das Rüstzeug für den Umgang mit Laufzeitfehlern vermittelt.

Ein großes Gebiet der VBScript-Programmierung ist die Arbeit mit Objekten. Dieses wichtige Thema ist in Kapitel 4 ausgelagert.

3.1 Die -Sprachfamilie Die Sprache BASIC (Beginners All Purpose Symbolic Instruction Code) hat bei eine lange Geschichte, zunächst als QBasic, später als Visual Basic. Innerhalb der Microsoft Windows-Welt ist Visual Basic die beliebteste Programmiersprache.

Visual Basic gibt es in vier Dialekten:

• Das eigentliche Visual Basic zur Entwicklung eigenständiger Anwen- dungen, • Embedded Visual Basic zur Entwicklung für Windows CE (dem Handheld-Betriebssystem von Microsoft), • Visual Basic for Applications (VBA) als Makrosprache in und anderen Endbenutzer-Anwendungen • und Visual Basic Script (VBS) für den (WSH) und andere Skript-Umgebungen in Windows-Anwendungen.

Die Visual Basic-Sprachfamilie 41 VBA und VBScript haben ähnliche Anwendungsgebiete. Der Hauptun- terschied liegt darin, dass VBScript kostenlos ist, während Microsoft für die Verbreitung von Anwendungen mit integriertem VBA kräftig Lizenzgebühren kassiert. VBA ist außerdem nicht nur eine Sprache, sondern umfasst auch eine komfortable Entwicklungsumgebung, wo- rin der Hauptgrund für den hohen Preis zu suchen ist.

Visual Basic Visual Basic.NET (Visual Basic 7.0)

In VB.NET entfallene Visual Basic 6.0 / VBA 6.0 Befehle

Visual Basic 5.0

VBA 5.0

Zusätzliche Befehle, VBScript 5.1 / 5.5 die es nur in VBScript gibt

© [email protected] Abbildung 3.1: Sprachumfang der VB-Dialekte

Wie in Kapitel 1 bereits erwähnt ist Visual Basic Script eine Interpreter- Sprache, bei der die Befehle erst während des Ablaufs zeichenweise in Maschinensprache-Befehle für den Mikroprozessor umgesetzt werden.

3.2 Allgemeines zum Arbeiten mit VBScript Innerhalb dieses Abschnittes geht es um grundlegende Regeln und den Aufbau von VBScript-Dateien. Im Gegensatz zu anderen Sprachen gibt es nur wenige Konventionen, die eingehalten werden müssen.

VBScript-Syntax Als Erstes einige einfache Regeln für die formale Struktur (Syntax) von VBScript:

• Grundsätzlich enthält jede Zeile genau einen Befehl. • Es ist möglich, mehrere Befehle getrennt durch einen Doppelpunkt in eine Zeile zu schreiben. Auf diese Möglichkeit sollten Sie aber aus Gründen der Übersichtlichkeit verzichten.

42 Programmieren mit VBScript • Wenn Befehle sich über mehr als eine Zeile erstrecken sollen, müssen alle Zeilen mit nicht abgeschlossenen Befehlen mit einem Unter- strich „_“ enden. • Leerzeilen, Leerzeichen und Tabulatoren sind in beliebiger Häufung erlaubt, um den Skriptcode übersichtlicher zu machen. • VBScript ist nicht case-sensitive: Die Groß- und Kleinschreibung der Schlüsselwörter ist also ebenso ohne Bedeutung wie die Schreibweise Ihrer selbst gewählten Bezeichner für Variablen, Unterroutinen, etc. • Sofern es nicht durch Bedingungen, Schleifen oder Unterroutinen (die Sie in diesem Kapitel später kennen lernen werden) anders be- stimmt wurde, wird ein Skript sequenziell ausgeführt. Die Ausfüh- rung beginnt in der ersten Zeile. Folglich ist die Reihenfolge der Be- fehle für die korrekte Ausführung des Skripts grundsätzlich wichtig. In vielen Fällen gibt es jedoch mehrere verschiedene richtige Reihen- folgen. Demnach ist die Reihenfolge nicht beliebig.

Bei der Erstellung von VBScript-Code gibt es also prinzipiell die Mög- Ein Befehl pro Zeile lichkeit, mehrere Anweisungen (Befehle) in eine Zeile zu schreiben. Diese Befehle müssen dazu allerdings mit einem Doppelpunkt (:) von- einander getrennt werden.

ErsterBefehl(): ZweiterBefehl() : DritterBefehl()

Allerdings entspricht dies nicht ganz der ordentlichen Programmie- rung. Damit der erstellte Code einfach zu lesen ist, sollte man pro Zeile immer nur einen Befehl verwenden:

ErsterBefehl() ZweiterBefehl() DritterBefehl()

Im Gegensatz zu anderen Sprachen, wie z.B. C++ oder Java, hält es VB- Groß- und Klein- Script mit der Groß- und Kleinschreibung nicht so genau. Es wird nicht schreibung zwischen diesen beiden Schreibweisen unterschieden, sodass die fol- genden Codezeilen absolut identisch interpretiert werden:

IF wert1>wert2 THEN wert2 = wert1 If wert1>wert2 Then wert2 = wert1 if wert1>wert2 then wert2 = wert1

Zwar ist es in VBScript möglich, sehr lange Codezeilen zu schreiben, Zeilenumbrüche allerdings sind diese für die Lesbarkeit nicht gerade von Vorteil. Sollte einmal der Fall auftreten, dass eine sehr lange Codezeile entsteht, so kann man zwischen zwei Zeichen, die nicht zu einem Befehl oder Wert gehören, durch einen Unterstrich (_)_ trennen und in der nächsten Zeile fortsetzen. Das folgende Beispiel verdeutlicht diese Möglichkeit.

Allgemeines zum Arbeiten mit VBScript 43 If (Wert1>Wert2) And (Wert2>Wert3) Or (Wert1>Wert3) Then … End If

Dieser Code kann durch Umbrechen von Zeilen mit dem Unterstrich wie folgt dargestellt werden:

If (Wert1>Wert2) And _ (Wert2>Wert3) Or _ (Wert1>Wert3) Then … End If

3.3 Kommentare Grundsätzlich sollte man bei der Programmierung dem eigentlichen Programmcode zusätzliche Kommentare hinzufügen, um das Pro- gramm für sich selbst und andere verständlich zu machen. Ein gutes Skript zeichnet sich dadurch aus, dass es gut lesbar ist, d.h. dass der Code ist entsprechend kommentiert wurde. Zwar kann man anhand des Programmcodes oft schon sehen, was innerhalb eines Skripts geschieht, allerdings wird diese Lesbarkeit durch Kommentare wesentlich verbes- sert. Um einen Kommentar innerhalb eines Codes zu definieren, muss dieser mit einem Hochkomma (') oder mit dem Schlüsselwort REM ein- geleitet werden.

' Kommentare.vbs ' Kommentieren von Quellcode ' Autor: [email protected] ' verwendet: keine weiteren Komponenten ' ======

' Dies ist ein Kommentar

REM Dies ist auch ein Kommentar

Listing 3.1: Kommentare.vbs

Dieses Beispiel enthält, wie jedes Beispiellisting in diesem Buch, einige Kommentarzeilen, die das Skript beschreiben (Name der Datei, Be- schreibung, Autor, etc.), sowie zwei beispielhafte Kommentare mittels Hochkomma (') und REM-Befehl.

44 Programmieren mit VBScript 3.4 Literale Bei Literalen handelt es sich um statische Werte, die direkt innerhalb des Codes hinterlegt werden. Literale werden zum Beispiel für folgende Aufgaben verwendet:

• Texte, die das Skript ausgeben soll • Namen von Dateien, die das Skript auslesen soll • Schwellwerte, die für Gültigkeitsprüfungen verwendet werden sollen

Es gibt verschiedene Arten von Werten:

Ganzzahlige numerische Werte werden einfach durch die Aneinander- Zahlen reihung von Ziffern dargestellt. Bei Fließkommazahlen (nicht-ganzzah- ligen numerischen Werten) wird das Dezimaltrennzeichen nicht durch ein Komma dargestellt, sondern – amerikanisch – durch einen Punkt.

Neben dem Dezimalsystem unterstützt VBScript noch zwei andere Zah- Andere Zahlen- lensysteme: Hexadezimalzahlen werden durch ein vorangestelltes "&h", systeme Oktalzahlen durch ein "&o" kenntlich gemacht.

Beim Scripting werden manchmal Zahlen als Hexadezimalzahlen oder Oktalzahlen dargestellt, weil die Darstellung einer bestimmten Zahl in diesen Zahlensystemen einfacher ist als im Dezimalsystem.

Zeichenketten werden in Anführungszeichen (") dargestellt. Jeweils am Strings Anfang und am Ende des Textes begrenzt dieses Zeichen die Zeichenket- ten. Möchte man innerhalb einer Zeichenkette selbst ein Anführungs- zeichen darstellen, so muss dieses mittels doppelter Anführungszeichen geschehen, z.B. „Hier ist ein Anführungszeichen “„Hallo“„ ! “.

Datums- und Uhrzeit-Werte werden innerhalb von zwei Nummerzei- Datum und chen (#) dargestellt. Darüber hinaus erfolgt die Darstellung im amerika- Uhrzeit nischen Format, d.h. mm/dd/yyyy. Für das Datum „11. April 1975“ schreibt man also: #04/11/1975#. Auch die Uhrzeit muss in amerikanischer Schreibweise angegeben werden, z.B. #04/11/1975 11:15:00AM#)

Die Wahrheitswerte (boolsche Werte) „Wahr“ und „Falsch“ werden mit- True und False tels der beiden Wörter True und False dargestellt.

Die Darstellung von Währungswerten ist abhängig von den Währungs- Währungs- einstellungen innerhalb der Systemsteuerung. Für eine auf Euro einge- angaben stellte Systemsteuerung wäre folgender Wert möglich: „3.231,59 €“. Da- bei muss der Wert innerhalb von Anführungszeichen angegeben werden.

Literale 45 Empty und Null Der Sonderzustand „noch kein Wert zugewiesen“ wird durch das Wort Empty angezeigt; der Sonderzustand „Variable hat keinen mehr“ wird durch das Wort Null dargestellt.

Ausgabe von Die einfachste Möglichkeit der Verwendung von Literalen ist der in Ka- Werten pitel 1 vorgestellte WScript.Echo-Befehl. Das folgende Beispiel zeigt, wie WScript.Echo die beschriebenen Formen von Literalen ausgibt. Die Aus- gabe zeigt, dass Hexadezimalzahlen und Oktalzahlen immer als Dezi- malzahlen ausgegeben werden. ' Literale.vbs ' Ausgabe von Literalen ' Autor: [email protected] ' verwendet: keine weiteren Komponenten ' ======

' Ausgabe von Zahlen WScript.Echo(123123)

WScript.Echo(323.923) WScript.Echo(&o77) WScript.Echo(&h0AE1)

WScript.Echo("Mein Name ist Oliver")

WScript.Echo(#04/11/1975#) WScript.Echo(#04/11/1975 11:15:00AM#)

WScript.Echo(True) WScript.Echo(False)

WScript.Echo("3.412,56 €")

WScript.Echo(Null) WScript.Echo(Empty)

Listing 3.2: Literale.vbs

Abbildung 3.2: Literale in der Kommandozeile, ausgeführt mit CScript.exe

46 Programmieren mit VBScript 3.5 Konstanten

Bei Konstanten handelt es sich um fest definierte Werte, die sich über Konstanten den gesamten Zeitraum der laufenden Anwendung nicht verändern sol- len bzw. die vom Design her auch nicht verändert werden dürfen. Ihr Zweck liegt darin, feste Werte zu definieren, die im laufenden Skript im- mer wieder verwendet werden können. Diesen Werten wird durch eine Konstantendefinition ein Name gegeben, sodass über diesen Namen auf den Wert zugegriffen werden kann.

Ein typisches Beispiel, das auch immer wieder in diesem Buch vor- kommt, ist der Name des anzusprechenden Computers. Dieser muss oft mehrmals in einem Skript verwendet werden. Wenn der Name sich än- dert, müsste normalerweise auch das Skript an mehreren Stellen geän- dert werden. Aus diesem Grund definiert man besser am Anfang des Skripts eine Konstante:

Const COMPUTER = "Sonne"

Danach verwendet man nicht mehr das Literal „Sonne“, sondern COMPUTER als Alias für das Literal „Sonne“.

Const COMPUTER = "Sonne" Wscript.Echo "Zugriff auf den Computer " & COMPUTER ' ... diverse Befehle ... Wscript.Echo "Computer " & COMPUTER & " wurde neu gestartet."

Wichtig ist, dass COMPUTER nicht innerhalb der Anführungszeichen steht, Kaufmännisches sondern über das kaufmännische Und-Zeichen mit den beiden Litera- UND len „Computer“ und „wurde neu gestartet.“ verbunden ist. Alternativ kann zur Verkettung auch das Plus-Zeichen verwendet werden.

Würden Sie schreiben „Computer COMPUTER wurde neu gestartet.“, dann würde der WSH genau das buchstabengetreu ausgeben und nicht den Namen „Sonne“ an die richtige Stelle einbauen. Eine Ersetzung ei- ner Konstanten durch den zugewiesenen Wert findet nur statt, wenn der Name der Konstante nicht in Anführungszeichen steht.

Das Wort COMPUTER ist ein beliebiger Begriff, der in diesem Zusammen- hang Bezeichner genannt wird. Das Wort komplett groß zu schreiben ist kein Muss; in diesem Buch werden aber alle selbst definierten Konstan- ten groß geschrieben.

Im Gegensatz zu Variablen (diese werden im Unterkapitel 3.6 beschrie- ben) kann der Wert von Konstanten zur Laufzeit nicht verändert wer- den. Wird dies versucht, so tritt ein Laufzeitfehler auf.

Konstanten 47 Bei Bezeichnern handelt es sich um vom Skriptentwickler vergebene Namen für Konstanten, Variablen und Unterroutinen. Die Namen dürfen relativ flexibel definiert werden, unterliegen allerdings den fol- genden Regeln:

Regeln für • Sie müssen mit einem Buchstaben beginnen. Bezeichner • Sie dürfen nicht länger als 255 Zeichen sein. • Sie dürfen nicht mit Schlüsselwörtern der Sprache identisch sein. • Sie dürfen außer dem Unterstrich keine Satz- oder Sonderzeichen enthalten.

3.5.1 Vordefinierte Konstanten

Kommentare VBScript enthält bereits ein umfangreiches Repertoire an vordefinierten Konstanten, die in verschiedenen Szenarien eine große Hilfe darstellen. So gibt es beispielsweise für einige Grundfarben Konstanten, die den Zahlenwert für die Farbe kapseln, sodass man sich nicht mehr diese Zahl, sondern nur noch den Namen merken muss.

Die eingebauten Konstanten erkennt man an ihrem Namen. Sie begin- nen stets mit „vb“.

' KonstantenStandard.vbs ' Arbeiten mit Konstanten ' Autor: [email protected] ' verwendet: keine weiteren Komponenten ' ======

WScript.Echo("Dies ist ein Beispiel für Standardkonstanten von VBScript.") WScript.Echo("Eine Zeile." & vbCrLf & "Noch eine Zeile." & vbCrLf & _ "Und noch eine Zeile.")

Listing 3.3: KonstantenStandard.vbs

Abbildung 3.3: Ausgabe des Listings

48 Programmieren mit VBScript Das Beispiel zeigt die Verwendung der Konstanten vbCrLf. Diese Kon- stante steht für die Zeichen, die für einen Zeilenumbruch zuständig sind. Dies wird in einem der folgenden Unterkapitel noch näher erläu- tert.

3.5.2 Definieren eigener Konstanten Die bisher beschriebenen vordefinierten Konstanten reichen allerdings bei weitem nicht in allen Fällen aus. Um die Entwicklung von Skripten zu verbessern und durch eigene Konstanten den Skriptcode lesbarer und wartbarer zu gestalten, ist es möglich, eigene Konstanten zu definieren. Dies geschieht mit dem Schlüsselwort Const. Jede beliebige Art von Lite- ralen kann zugewiesen werden.

Const conMeinAlter = 27 Const conMeinComputer = "R2D2" Const conDatum = #08/31/02# Const MEIN_NAME = "Oliver"

Für die Entwicklung von Skripten und die Verwendung von Konstanten Namen für empfiehlt es sich, eine einheitliche Form für die Vergabe von Konstan- Konstanten tennamen zu verwenden. Dabei gibt es keine verpflichtenden Vorga- ben, allerdings gibt es bereits einige sinnvolle Schreibweisen für Kon- stanten. Zum einen kann durch das Voransetzen von „con“ für „Const“ ein Bezeichner als Konstante gekennzeichnet werden, z.B. conFesterWert. Eine weitere Möglichkeit wäre aber auch die Großschreibung des Be- zeichners, z.B. FESTER_WERT. Dadurch werden Les- und Wartbarkeit we- sentlich verbessert. Letztere Notation verwenden wir in diesem Buch.

3.5.3 Verwenden von Konstanten Das folgende Beispiel definiert zwei Konstanten MEIN_NAME und MEIN_ALTER. Diese beinhalten eine Zeichenkette und eine Zahl. Diese Werte werden innerhalb der Anwendung für eine Ausgabe des Namens und für den Vergleich des Alters des Benutzers verwendet.

' Konstanten.vbs ' Arbeiten mit Konstanten ' Autor: [email protected] ' verwendet: Const ' ======

Const MEIN_NAME = "Oliver" Const MEIN_ALTER = "27"

Konstanten 49 ' Ausgabe des Namens des Skript-Autors WScript.Echo("Mein Name ist " & MEIN_NAME & ".")

' Ausgabe des Alters des Skript-Autors WScript.Echo("Ich bin " & MEIN_ALTER & " Jahre alt.")

Listing 3.4: Konstanten.vbs

3.6 Variablen

Variablen Bei Variablen handelt es sich – ähnlich wie bei Konstanten – um Spei- cher für einzelne Werte. Wie in Konstanten können auch in Variablen beliebige Literale aufgenommen werden. Im Gegensatz zu Konstanten sind die Inhalte von Variablen aber zur Laufzeit des Skripts, wie der Name schon sagt, variabel – sie lassen sich verändern. Die Veränderung kann die Zuweisung eines anderen Literals sein oder die Zuweisung ei- nes Ausdrucks, der ein Ergebnis erreicht. „Ausdruck“ ist ein anderes Wort für eine Formel. Ein Ausdruck besteht aus mindestens einem Ope- rator und mindestens einer Variablen oder Konstanten.

Variablen werden innerhalb von Skripten dazu verwendet, dynamisch Werte aufzunehmen, um mit diesen weiterzuarbeiten und sie auf belie- bige Weise zu manipulieren, um so zu einem gewünschten Ergebnis zu kommen.

Für die Namen von Variablen gelten die gleichen Regeln wie für die Na- men von Konstanten. Variablen schreiben wir in diesem Buch in nor- maler Groß-/Kleinschreibweise. Um eine Variable von einem Befehl un- terscheiden zu können, verwenden wir folgende Vereinbarung:

1. Alle Variablen-Bezeichner sind auf Deutsch (sofern es nicht nur ein- fache Namen wie x und y sind). 2. Befehle erhalten als Zusatz immer ein Klammernpaar (). Das ist so üblich und Sie werden später noch verstehen warum.

3.6.1 Verwenden von Variablen Eine Variable kann auf der linken oder rechten Seite einer Zuweisung verwendet werden.

Form Beispiel Variable = Literal Name = "Holger Schwichtenberg" Variable1 = Variable2 Name = "Holger " & "Schwichtenberg" Operator Variable3

50 Programmieren mit VBScript