VBScript-Sonderzeichen

Von The Microsoft Scripting Guys

Sesame Script

Willkommen zu Sesame Script, der Kolumne für Anfänger in der Skriptprogrammierung. In dieser Reihe werden erste grundlegende Kenntnisse zur Skriptprogrammierung vermittelt, durch die Sie viele Aufgaben der Systemadministration unter Windows automatisieren können. Durch die vorgestellten Konzepte der Skriptprogrammierung werden Sie in der Lage sein, Skripts zu lesen und zu verstehen und Ihre ersten eigenen Änderungen oder Erweiterungen in Skripts vorzunehmen. Sollte Ihnen ein spezieller Aspekt der Skriptprogrammierung Schwierigkeiten bereiten, lassen Sie es uns wissen (in englischer Sprache). Sehr wahrscheinlich sind Sie nicht der Einzige, der vor einem bestimmten Problem steht. Dieser Artikel enthält Links zu englischsprachigen Seiten.

Lesen Sie auch die bisherigen Artikel im Sesame Script-Archiv.

Auf dieser Seite

Sonderzeichen
Zeilen
Dies & Das
Fortsetzung folgt
'-Kommentare
Erweitert: Problembehandlung mit Kommentaren

Sonderzeichen

Es ist ein schöner Tag hier in Redmond, es sieht jedoch so aus, als würde die meisten unseres Softballteams behaupten, sie seien zu überarbeitet, um etwas Spaß zu haben. So müssen wir wohl aus Mangel an Mitspielern auf unser Match verzichten. (Peter behauptet, er sei heute krankgeschrieben, wollen wir ihm dieses Mal Glauben schenken. Sonst aber hat niemand eine gute Ausrede, wir wissen, dass sich hier keiner überarbeitet.)

Nachdem nun die traurigen Ausreden statt zu einem Softballspiel zu zusätzlicher Arbeitszeit geführt haben, heißt es produktiv zu sein und eine weitere Kolumne zu verfassen. Wir wenden uns heute an die blutigen Anfänger und betrachten einige Sonderzeichen, die in fast allen VBScript-Skripts verwendet werden, denen Sie begegnen werden. Außerdem wollen wir erläutern, wofür sie gut sind. Anschließend gehen wir raus und genießen den Sonnenschein - auch ohne das Softballteam.

Zeilen

Bevor wir uns die eigentlichen Sonderzeichen ansehen, befassen wir uns mit einem grundlegenden Aspekt beim Schreiben von Skripts: der Zeile. Wie wir bereits in einem früheren Artikel erläutert haben, handelt es sich bei dieser einzelnen Zeile um ein Skript:

Wscript.Echo "My very first script."

Wenn Sie zwei Zeilen ausgeben möchten, können Sie etwa Folgendes versuchen:

Wscript.Echo "Line 1" Wscript.Echo "Line 2"

Sie können es versuchen, es wird jedoch nicht funktionieren. Eine Grundregel in VBScript lautet, dass nur ein Befehl pro Zeile zulässig ist. Das Skript müsste also folgendermaßen geschrieben werden:

Wscript.Echo "Line 1"
Wscript.Echo "Line 2"

Hinweis: Okay, es gibt eine Möglichkeit, mehr als einen Befehl pro Zeile einzufügen. Dabei handelt es sich um ein anderes Sonderzeichen, den Doppelpunkt (:). Dieses Skript wird funktionieren:

Wscript.Echo "Line 1" : Wscript.Echo "Line 2"

Wie Sie sehen, haben wir einfach die beiden Befehle durch einen Doppelpunkt getrennt. Wenn Sie jedoch auf den Rat der Scripting Guys hören wollen (und wer wollte das nicht?), so empfehlen wir diesen Notationstyp niemals zu verwenden. Es macht die Skripts schwer lesbar und ist schlicht hässlich. Wenn Sie derartige Skripts produzieren, werden wir niemandem erzählen, dass Sie Ihre Skriptprogrammierungstechnik bei uns gelernt haben.

Eine weitere Regel in VBScript lautet, dass sich der gesamte Befehl in einer Zeile befinden muss. Dieses Beispiel würde also ebenfalls nicht funktionieren:

Wscript.Echo
"Line 1"

Auch werden mehrere Leerzeichen ignoriert (sofern sie sich nicht innerhalb einer Zeichenfolge befinden). Dieses Beispiel:

Wscript.Echo "Line 1"

funktioniert also genauso wie dieses:

Wscript.Echo             "Line 1"

(nicht jedoch wie dieses:)

Wscript.Echo "         Line 1"

Daraus können Sie schließen, dass es keine Rolle spielt, wo Sie in einer Zeile beginnen. Dadurch sind Einrückungen möglich, die Ihr Skript lesbarer machen. Beispiel:

For i = 1 to 5
    Wscript.Echo i
Next

Das Skript zählt einfach von eins bis fünf und gibt die Nummer aus. Mit Schleifen beschäftigen wir uns in einem anderen Artikel. Hier nur so viel: Alles zwischen der Zeile For und der Zeile Next wird fünfmal durchgeführt. Ein kurzer Blick auf diese Schleife sagt Ihnen, dass sich Wscript.Echo zwischen einer For-Zeile und einer Next-Zeile befindet, und daher fünfmal aufgerufen wird. Um diesen Umstand im nächsten Skript erkennen zu können, müssen Sie etwas genauer hinsehen. Dies gilt auch, wenn es sich um den Teil eines größere Skripts handelt, oder wenn sich zwischen For und Next mehr als eine Echo-Anweisung befindet:

For i = 1 to 5
Wscript.Echo i
Next

Lassen Sie uns auf dieser Grundlage weitermachen.

Dies & Das

Ein Zeichen, das Ihnen in VBScript häufig begegnet ist das kaufmännische Und-Zeichen (&). Eine der Hauptaufgaben dieses Zeichens ist die Verkettung von Elementen, z. B. von Zeichenfolgen oder Variablen. Nehmen wir beispielsweise an, wir wollten den Vor- und Nachnamen eines bestimmten Benutzers ermitteln. Das Problem hierbei ist, dass Sie die Vor- und Nachnamen von unterschiedlichen Orten abrufen müssen, so z. B. verschiedene Felder in Active Directory oder verschiedene Datensätze in einer Datenbank. Beide sollen jedoch wie folgt in einer Zeile angezeigt werden:

Ken Myer

Wir wissen bereits, dass es so nicht funktioniert:

First = "Ken"
Last = "Myer"
Wscript.Echo First Wscript.Echo Last

Hier sind zu viele Befehle in einer Zeile. Auch Folgendes ist nicht möglich:

First = "Ken"
Last = "Myer"
Wscript.Echo First Last

Mit Wscript.Echo kann lediglich jeweils ein Element ausgegeben werden. Wie bekommen wir also die Vor- und Nachnamen zusammen? Hier kommt das kaufmännische Und-Zeichen zum Tragen:

First = "Ken"
Last = "Myer"
Wscript.Echo First & Last

Nett, was? Nein? Wo klemmt's? Oh ja, das Leerzeichen. Das obige Skript ermöglicht folgende Ausgabe:

KenMyer

Wir wollen jedoch jeweils separate Vor- und Nachnamen anzeigen. Das ist recht einfach. Sie können in einer Zeile beliebig viele &-Zeichen verwenden:

First = "Ken"
Last = "Myer"
Wscript.Echo First & " " & Last

So ist es besser:

Ken Myer

Nun denken Sie vielleicht: "Einen Augenblick. Ihr habt behauptet, man könne jeweils nur ein Element ausgeben, hier sind es drei Elemente: Vorname, Nachname und ein Leerzeichen!" Das ist das Schöne am kaufmännischen Und-Zeichen: Sie können die Regeln ein wenig dehnen. Nehmen wir an, Sie befinden sich im Lebensmittelgeschäft, und die Schlangen an der Kasse sind beträchtlich. Nur eine Schlange ist kürzer. Es handelt sich jedoch um die Expresskasse, an der Sie höchstens 15 Artikel zahlen dürfen. Sie haben drei Pepsi-Six-Packs. Haben Sie nun 18 Artikel, die Sie von der Expresskasse ausschließen, oder lediglich drei? Da Sie gebündelt sind, werden Sie davon ausgehen, dass es sich um drei handelt und zur Expresskasse gehen. Vermutlich würde sich auch niemand darüber beschweren. Das kaufmännische Und-Zeichen bündelt Elemente, damit Sie sich nicht mit separaten Zeichenfolgen, Variablen, und Befehlen befassen müssen. Und VBScript wird sich nicht darüber beschweren. Viel schneller und einfacher, wie die Expresskasse.

Was geschieht jedoch, wenn Ihr Skript über eine sehr lange Zeile verfügt? Eine einzelne Zeile kann äußerst schwer lesbar sein, wenn Sie sich über die Bildschirmbreite hinaus erstreckt. Beispiel:

intAnswer = 42
Wscript.Echo "The answer to life, the universe and everything is: " & intAnswer

Sicher, diese Zeile ist nicht furchtbar lang, aber nehmen wir Sie einfach als Beispiel. Wir haben bereits erwähnt, dass man nicht einfach einen Teil des Befehls in die nächste Zeile packen kann, wie hier:

intAnswer = 42
Wscript.Echo "The answer to life, the universe and everything is: " 
    & intAnswer

Was also können wir tun? Technisch betrachtet müssen wir gar nichts unternehmen. Zeilen können beliebig lang sein. Um jedoch sicherzustellen, das unsere Skripts einfach lesbar sind, verwenden wir das Zeilenfortsetzungszeichen, das auch Unterstrich (_) genannt wird.

Weitere Informationen

Concatenation Operators – VBScript Language Reference (in englischer Sprache)

Verketten von Zeichenketten – Microsoft Windows 2000 – Scripting-Handbuch

Fortsetzung folgt

Der Unterstrich wird hauptsächlich verwendet, um Skripts leichter lesbar zu machen. Stellen Sie sich einen einzigen Befehl mit mehr als 100 Zeichen vor. Die Zeile würde weit über das Notepad-Fenster hinausreichen, und Sie müssten mit der Bildlaufleiste arbeiten, um das gesamte Skript lesen zu können. Wir können Ihnen hier nicht einmal ein Beispiel bieten, da es diese Webseite in die Breite ziehen und unlesbar machen würde. Daher zeigen wir Ihnen ein Bild:

Lange Zeilen

In Notepad könnten Sie zwar den Zeilenumbruch einschalten, das wirkt jedoch auch etwas hässlich:

Lange Zeilen mit Zeilenumbruch

Was also können wir tun? Wir verwenden den Unterstrich, um die Sache aufzubrechen. Jetzt können wir Ihnen ein Skript zeigen:

intComputers = 40
intServer = 5
intDesktop = 35
Wscript.Echo "There are " & intComputers & _
    " computers in use by the Accounting department: " & _
    intServer & " servers and " & intDesktop & " desktop machines."

So sieht es in Notepad aus:

Formatierte lange Zeilen

Beachten Sie, dass wir auch einige Leerzeichen eingerückt haben, sodass Sie auf Anhieb erkennen können, dass die beiden fortgesetzten Zeilen immer noch Teil der Anweisung Wscript.Echo sind. Das Skript ist nun weitaus leichter lesbar. Und Sie wissen ja, wie sehr es die Scripting Guys schätzen, Dinge auf die leichte Art zu tun.

Weitere Informationen

Zeilenumbrüche in VBScript – Windows 2000 – Scripting-Handbuch

'-Kommentare

Einer der Scripting Guys ist ein großer Fan der TV-Quizshow Jeopardy! Das soll nicht etwa heißen, dass er bei diesem Spiel besonders gut wäre. Die meiste Zeit verbringt er damit zu sagen: "Das weiß ich, das weiß ich…ähh….". Ein ähnlicher Gedächtnisverlust kann beim Schreiben von Skripts auftreten. "Warum habe ich das so geschrieben?" "Was sollte dieses Skript machen?" "Ich weiß, ich hatte dafür einen guten Grund…"

Die einfachste Möglichkeit, sich stets daran zu erinnern, was ein Skript tut, ist es zu kommentieren. Nun kennen Sie vielleicht Sprüche wie "kommentiere jede Zeile" oder "füge so viele Kommentare wie möglich ein". Wir möchten hier etwas vernünftiger vorgehen. Denn letztlich bedeutet eine Kommentierung auch mehr Tipperei, die wir stets vermeiden möchten.

Was also ist ein Kommentar? Das bringt uns zu dem letzten Zeichen, mit dem wir uns heute befassen wollen. In VBScript handelt es sich bei einem Kommentar um eine Zeile, die mit einem einfachen Anführungszeichen (') beginnt.

' This script echoes a name
Wscript.Echo "Ken Myer"

Erinnern Sie sich noch, dass wir gerade behauptet haben, etwas vernünftiger vorgehen zu wollen? Dieser Kommentar ist unvernünftig. Ein Blick auf die Anweisung Wscript.Echo, und Sie wissen genau, was das Skript tut. Sie benötigen keinen Kommentar, der Ihnen dies mitteilt. Als etwas geeigneteres Beispiel haben wir ein Skript aus einer kürzlichen Tales from the Script-Kolumne (in englischer Sprache) zur Skriptprogrammierung von Popupblockern ausgewählt und einige Kommentare hinzugefügt:

' Returns whether or not the registry key associated with 
'  the MSN Toolbar Suite popup blocker exists. If it does, the
'  popup blocker is already installed.
Const HKEY_CURRENT_USER = &H80000001

strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "Software\Microsoft\MSN Apps\MSN Popup Blocker"
strValueName = "Enabled"
objRegistry.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

If IsNull(dwValue) Then
    Wscript.Echo "The registry key does not exist."
Else
    Wscript.Echo "The registry key exists."
End If

Hierbei ist es wichtig zu beachten, dass Sie in Kommentaren das Fortsetzungszeichen (Unterstrich) nicht verwenden dürfen. Jede Zeile, die über einen Kommentar verfügt, muss mit einem einfachen Anführungszeichen beginnen.

Sie können einen Kommentar auch an das Ende einer Zeile setzen. Probieren Sie Folgendes aus:

Wscript.Echo "Line 1" ' This echoes one line

Erinnern Sie sich, dass wir gesagt haben, dass man ohne ein & nur ein Element nach der Anweisung Echo einfügen darf? Nun, Kommentare gelten nicht als "Element". Alles, was sich in einer Zeile nach dem einfachen Anführungszeichen befindet, wird ignoriert. In VBScript wird es sogar als nicht vorhanden betrachtet.

Weitere Informationen

Verketten von Zeichenketten – Microsoft Windows 2000 – Scripting-Handbuch

VBScript Coding Conventions – VBScript User’s Guide (in englischer Sprache)

Erweitert: Problembehandlung mit Kommentaren

Das Kommentarzeichen hat außer dem Einfügen von Kommentaren zur Erläuterung des Codes noch eine weitere wichtige Verwendung. Wie bereits erwähnt, wird in VBScript das einfache Anführungszeichen sowie alles, was diesem in der Zeile folgt, ignoriert. Daher können Sie das Anführungszeichen auch als strategisches Mittel zur Problembehandlung verwenden. Nehmen Sie dieses Skript, von dem Sie bereits wissen, dass es nicht ausgeführt werden kann:

intAnswer = 42
Wscript.Echo "The answer to life, the universe and everything is: " 
    & intAnswer

Dieses Skript führt zu einer Fehlermeldung, die angibt, dass sich der Fehler in Zeile 3 befindet (dies bedeutet die 3 in (3, 5)):

C:\Scripts\test.vbs(3, 5) Microsoft VBScript compilation error: Expected statement

Also verwandeln wir Zeile 3 in einen Kommentar (wir "kommentieren Zeile 3 aus"), indem wir am Beginn der Zeile ein einfaches Anführungszeichen einfügen. Testen Sie das Skript jetzt:

intAnswer = 42
Wscript.Echo "The answer to life, the universe and everything is: " 
'    & intAnswer

Wie Sie sehen, ist kein Fehler mehr vorhanden. Das bedeutet, dass sich der Fehler tatsächlich in der dritten Zeile befindet, der Rest des Skripts ist in Ordnung.

Mit dieser Information ausgestattet können Sie möglicherweise weitere Verwendungen für das Kommentieren oder Auskommentieren von Codezeilen entdecken.

Das war's für heute. Möchte jemand Softball spielen?

Weitere Informationen

Using Comments as a Debugging Aid – Windows 2000 – Scripting Guide (in englischer Sprache)

Scripting Puzzle Solutions – TechNet Script Center (in englischer Sprache)