VBScript-Sonderzeichen
Von The Microsoft Scripting Guys
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:
In Notepad könnten Sie zwar den Zeilenumbruch einschalten, das wirkt jedoch auch etwas hässlich:
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:
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)