• Programme starten bzw. fern steuern
- Befehlsinterpreter (DOS-Eingabeaufforderung)
- WSHShell.Run-Methode
- WSHShell.Exec-Methode
• 'SendTo' an ein Skript
• Argumente aus Batch-Aufrufen
• Datei(en) auf Skript ziehen und fallen lassen (Argumente)
• Leerzeichen im Dateinamen und Anführungszeichen in Zeichenketten
• WSH/VBS im Vergleich zu anderen Skriptsprachen - welche ist besser?
Zu einigen Skripten sind Funktionsbeschreibungen verfügbar:
Datei-Verzeichnis-Liste.vbs
deltree.vbs
CDdurchsuchen.vbs
CD-Menu.vbs
scriptinfo.vbs
von md-doc.de
↑ Zum Seitenanfang ↑
Programme starten bzw. fernsteuern
Nicht für alle Aufgaben, die man mit einem Skript lösen will, gibt
es die erforderlichen Objekte und Methoden. Da die 'Windows Script -
Technologien' Erweiterungen des Betriebssystems sind, lassen sich viele zum
Betriebssystem gehörenden Programme verwenden - natürlich auch viele
zusätzlich installierte Programme.
So kann z.B. das notepad oder der InternetExplorer die Anzeige von
Protokolldateien übernehmen.
Für Netzwerkoperationen gibt es zwar einige Methoden (z.B. MapNetWorkDrive),
aber längst nicht alle Funktionen, wie sie der NET-Befehl so nett bereit
stellt, sind verfügbar.
Darüber hinaus lassen sich auch vorhandene oder selbst geschriebene
ActiveX-Komponenten, OCX'e, ADSI oder WMI nutzen.
Die folgenden Erläuterungen bauen auf die Informationen aus der 'Windows Script'-Hilfe
auf und beschränken sich auf die Verwendung der 'einfachen' Varianten:
- Befehlsinterpreter
- WSHShell.Run-Methode
- WSHShell.Exec-Methode
Mit der WSHShell.Run-Methode können neben Programmen
(z.B. 'notepad.exe') auch Dokumente (z.B. 'c:\index.html' oder 'readme.txt')
gestartet werden. Um Befehlszeilenkommandos (z.B. 'ping') aufzurufen und deren
Ausgaben auszuwerten, werden diese mit der WSHShell.Run-Methode
gestartet, wobei durch Aufrufparameter ('ping 127.0.0.1 > c:\dir.txt')
eine Umleitung der Ausgaben in eine Text-Datei erfolgen kann. Anschließend
läßt sich diese Text-Datei unter anderem einlesen und somit auswerten.
Bei der WSHShell.Exec-Methode können Programme
die Ausgaben direkt an Skriptvariablen übergeben - der Umweg über
eine Datei entfällt also.
Der Nachteil der WSHShell.Exec-Methode:
es erscheint immer ein (leeres) schwarzes Fenster. Für die
WSHShell.Run-Methode stehen
Parameter zur Verfügung, mit der sich das unterbinden läßt.
Der Vorteil der WSHShell.Exec-Methode:
das gestartete Programm kann gezielt abgebrochen werden (kill). Dieses
gezielte Abbrechen ist nützlich, wenn eine Anwendung entweder sofort
(z.B. in 3 Sekunden) ein Ergebnis liefert oder erst nach 10 Minuten
(z.B. wegen fehlerhafter Netzverbindung) aufgibt - man kann die Anwendung
nach 10 Sekunden abbrechen.
↑ Zum Seitenanfang ↑
Programme starten - Befehlsinterpreter
Jedes Betriebssystem verfügt über Befehlszeilenkommandos (copy, xcopy,
find, attrib, net), die ohne grafische Oberfläche auskommen; in einem
'schwarzen' Fenster, der Eingabeaufforderung (häufig auch Dos-Box genannt).
Zum Teil sind sie gerade deshalb so schnell.
Wie in DOS (DR-DOS, IBM-DOS, MS-DOS, ... ) gibt es interne und externe Befehle, d.h.
einige Befehle sind im 'Lieferumfang' des Betriebssystems enthalten und werden
als .exe oder .com (externe Befehle; z.B. xcopy) mitgeliefert. Andere Befehle
sind als interne Befehle (z.B. copy) in dem Befehlsinterpreter
command.com (Win9x/ME) bzw. cmd.exe (WinNT2k/XP) integriert.
Die Befehlszeilenkommandos setzen einen Befehlsinterpreter voraus, der
betriebssystemabhängig ist: command.com für Win9x/ME und cmd.exe
für WinNT/2k/XP. Die command.com bzw. cmd.exe öffnet
das typisch schwarze Fenster und fordert durch den blinkenden Cursor zu
einer Eingabe auf; das ist die Eingabeaufforderung bzw. der DOS-Prompt.
Eingaben werden mit einem [Enter] abgeschlossen, wodurch der Befehlsinterpreter
'weiss', dass er ein Programm (oder ähnliches) abzuarbeiten hat. Zunächst muss
er das Programm finden, wenn es nicht
genau mit seinem Speicherort (z.B.
c:\windows\scandisk) angegeben ist. Dafür durchsucht er alle
Verzeichnisse, die er durch die Angaben in der Umgebungsvariablen Path
erreichen kann und startet das erst beste Programm, das er findet.
Path, gefolgt von einem [Enter] in der Eingabeaufforderung eingegeben,
gibt die in Path hinterlegten Informationen aus. Ändern kann man diese
Variable durch Path=c:\dos und erweitern durch Path=%Path%;c:\dos.
(Das %Path% gibt den Inhalt der Path-Umgebungsvariablen zurück.)
Die Änderungen gelten nur in der Eingabeaufforderung, in der sie vorgenommen
und solange sie nicht geschlossen wurde.
Nach dem Befehlsaufruf überprüft der Befehlsinterpreter als erstes, ob es sich
um einen internen Befehl handelt (Eine copy.exe hat also keine Chance.).
Ist dies nicht der Fall, durchsucht der Befehlsinterpreter die Path-Pfade
der Reihe nach, ob es Dateien mit den Endungen .bat, .com und .exe
(und .cmd bein WinNT2k/XP) gibt, um diese zu starten.
Die erste Datei, die diese Bedingung erfüllt, versucht das Betriebssystem dann
auszuführen. Gibt es in einem Verzeichnis
eine test.bat, eine test.cmd, eine test.com und eine test.exe,
wird die test.com ausgeführt; sonst die test.exe.
Beim Aufruf von test wird test.cmd nur ausgeführt, wenn es
die anderen Varianten in diesem Verzeichnis nicht gibt.
Die Reihenfolge ist also: interner Befehl, .com, .exe, .bat (.cmd).
Eine Besonderheit stellen die Dateien mit der Endung .bat und .cmd dar: das sind
Batch- bzw. Stapelverarbeitungsdateien. Sie sind reine Text- bzw. ASCII-Dateien,
in denen in jeder Zeile (Befehlszeilen-) Kommandos stehen, also
.bat, .com, .cmd oder .exe oder interne Befehle.
Typisch für die meisten Befehlszeilenkommandos ist, dass sie nur dann vernünftige
Arbeit leisten, wenn ihnen per Aufruf- bzw. Befehlszeilenparameter die
Aufgaben beim Starten auch mitgeteilt werden. Um einer Fehlermeldung bei xcopy
vorzubeugen, sollte natürlich z.B. Quell- und Zielverzeichnis an den xcopy
-Befehl mit übergeben werden: xcopy c:\temp d:\temp. Welche Parameter von einem
Befehl unterstützt werden, wird häufig durch Eingabe des Befehls gefolgt
von ' /? ' angezeigt: z.B. xcopy /? .
Um in einem Skript zu prüfen, ob ein Befehlszeilenkommando fehlerfrei
abgelaufen ist, lassen sich die Ausgaben in eine Datei umleiten
(mit einem Pipe-Befehl), um die Protokolldatei per Skript nach
Fehlermeldungen zu durchsuchen.
Zum testen der Erreichbarkeit eines Servers mit dem Ping-Befehls,
werden so die Ping-Ausgaben in einer Datei gespeichert
(vergl. Programme starten - WSHShell.Run-Methode):
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "Ping dieseyerSrv > test.txt"
Durch das > verschwinden die Ausgaben (unter anderem die Zeile
Antwort von 10.0.0.44: Bytes=32 Zeit>10ms TTL=128)
in einer Datei test.txt.
Übrigens: ein > legt immer eine neue Datei an; zwei > erweitern
eine vorhandene Datei oder legen eine neue an, wenn es keine gibt.
↑ Zum Seitenanfang ↑
Programme starten - WSHShell.Run-Methode
Um andere Programme für WSH/VBScript arbeiten zu lassen, müssen diese gestartet
(und deren Ausgaben erfasst bzw. ausgewertet) werden. Dafür stellt der
'Windows Script Host' die WSHShell.Run-Methode des WSHShell-Objekts zur Verfügung:
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "notepad.exe"
Oder:
WScript.CreateObject("WScript.Shell").Run "notepad"
Wichtig: Das Betriebssystem sucht beim Aufruf von notepad nach einer Datei,
die notepad heißt und als Endung .bat, .com, .cmd oder .exe hat (vergl.
Programme starten - Befehlsinterpreter).
Das Skript läuft nach dem Start des Programms weiter, ohne darauf
zu warten, dass das Programm seine Arbeit beendet hat. Häufig benötigt
man aber die Ergebnisse, die das Programm z.B. in eine Datei schreibt.
Dazu kann man die .Run-Zeile mit true enden lassen (nach zwei mal
Komma) und das Skript 'wartet' auf das Ende des Programms:
WScript.CreateObject("WScript.Shell").Run "notepad", , True
Weitere Parameter entnehme man der 'Windows Script'-Hilfe.
Mit der WSHShell.Run-Methode lassen sich alle Arten
von Programmen starten, aber auch Dokumente. Dann entscheidet das
Betriebssystem an Hand der Dateiendung, welche Anwendung gestartet wird.
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "c:\temp\test.rtf"
Durch eine *.rtf-Datei dürfte meistens MS-Word gestartet werden; nur wenn dieses
Programm nicht installiert ist, wird das Betriebssystem WordPad bemühen. Alternativ
läßt sich gleich Wordpad festlegen:
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "wordpad c:\temp\test.rtf"
Man beachte aber
Leerzeichen im Dateinamen und Anführungszeichen in Zeichenketten.
Für das Suchen nach Dateien werden in Skripten die (Unter-) Verzeichnisse
rekursiv durchsucht. Bei der Erstellung eines Skripts, das die Länge der
kompletten Dateinamen aller Dateien auf einem Server überprüfen sollte,
fiel mir auf, dass der DIR-Befehl 10 mal schneller als eine Skriptvariante
ist (dateinamenlangdir.vbs). Da der DIR-Befehl aber ein interner Befehl
(vergl. Programme starten - Befehlsinterpreter)
des Befehlsinterpreters command.com bzw. cmd.exe ist,
führte
WSHShell.Run "dir \\dieseyerSrv\d$\*.* /s /b >dir.txt"
nicht zum Ziel.
Man muss den Befehlsinterpreter mit aufrufen. Damit das Skript in der
Windows-Welt betriebssystemunabhängig wird, verwendet man die
Umgebungsvariable Comspec, die je nach Betriebssystem auf
command.com bzw. cmd.exe verweist:
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "%comspec% /c dir c:\ /s /b > dir.txt" , , True
WSHShell.Run "dir.txt"
↑ Zum Seitenanfang ↑
Programme starten - WSHShell.Exec-Methode
ACHTUNG: Die WSHShell.Exec-Methode ist erst seit
Okt. 2001 mit den 'Windows Script - Technologien' Version 5.6 verfügbar.
Mit dieser WSHShell.Exec-Methode können Programme ähnlich der
WSHShell.Run-Methode gestartet werden.
Beim Aufruf von Befehlszeilenkommandos und -programmen
gelten die unter
Programme starten - Befehlsinterpreter
beschriebenen Besonderhheiten.
Um in einem Netzwerk zu testen, ob ein PC oder Server erreichbar ist,
wird häufig der ping-Befehl benutzt (von dem die Ausgaben in
eine Datei umgeleitet werden). Mit der WSHShell.Run-Methode
sieht der Code etwa so aus:
'**************************************************************
Function PingTest ( IPtst ) ' v2.C - http://dieseyer.de
'**************************************************************
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
File = fso.GetBaseName( WScript.ScriptName ) & ".log"
WshShell.run ("%comspec% /c Ping " & IPtst & " -n 1 -w 500 > " & File ),0,true
' PING nur einmal ausführen => nur eine Zeile mit TTL=
Set FileIn = fso.OpenTextFile(File , 1, true)
' Datei zum Lesen öffnen
PingTest = "keine Antwort"
Do While Not (FileIn.atEndOfStream)
' wenn Datei nicht zu Ende ist, weiter machen
if InStr( CStr( FileIn.Readline ), "TTL=") > 1 then PingTest = "Antwort erhalten"
' eine Zeile lesen und auf Inhalt testen
Loop
FileIn.Close
Set FileIn = nothing
End Function ' PingTest ( IPtst ) ' v2.C - http://dieseyer.de
'**************************************************************
Was im Skript passiert: Mit der WSHShell.Run-Methode wird ping
gestartet, wobei die Ausgaben in eine Text-Datei umgeleitet werden.
Anschließend wird diese Datei geöffnet, die Zeilen einzeln gelesen
und dabei geprüft, ob es in der gelesenen Zeile die Zeichenfolge
'TTL=' gibt. Sind diese Zeichen in einer der gelesenen Zeilen
enthalten, wird die Variable PingTest von 'keine Antwort' auf
'Antwort erhalten' gesetzt. (Vergl.
Sub-Prozeduren und Function-Prozeduren -
eine Einführung.)
Verwendet man die WSHShell.Exec-Methode könnte die Function-Prozedur so aussehen:
MsgBox PingTest ( "127.0.0.1" )
'**************************************************************
Function PingTest ( IPtst ) ' v3.A - http://dieseyer.de
'**************************************************************
Dim WSHShell, oExec, input
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%comspec% /c Ping " & IPtst & " -n 1 -w 500" )
Do While Not oExec.StdOut.AtEndOfStream
input = input & oExec.StdOut.Read(1)
Loop
PingTest = "keine Antwort"
If InStr(input, "TTL=" ) <> 0 Then
PingTest = "Antwort erhalten"
End If
End Function ' PingTest ( IPtst ) ' v3.A - http://dieseyer.de
'**************************************************************
Mit Set oExec wird sofort der Aufruf
%comspec% /c Ping " & IPtst & " -n 1 -w 500"
gestartet. In der nachfolgenden Do .. Loop-Schleife werden
die Ausgaben des ping zeichenweise gelesen, bis der Datenstrom
(AtEndOfStream) abbreisst (weil ping beendet ist).
Enthält dieser Datenstrom an irgend einer Stelle TTL=,
hat der Ziel-PC geantwortet.
Alternativ kann man auch auf das Ende des ping-Aufrufes
warten und alle Ausgaben auf einen Ruck lesen. Im folgenden
kompletten Beispiel-Skript wird die Function zweimal aufgerufen:
beim ersten Mal
mit einer IP-Adresse und beim zweiten Mal mit dem Namen des
Computers, auf dem das Skript läuft. Dadurch, dass der zweite
Aufruf einen Computernamen (und keine IP-Adresse) enthält,
versucht der Ping-Befehl den Namen in eine IP-Adresse aufzulösen;
er bemüht also einen Name-Services (DNS oder WINS). Antwortet
der Name-Services nicht schnell genug, wird der Ping-Befehl
mit oExec.Terminate abgebrochen (was zu demonstrieren war).
MsgBox PingTest ( "127.0.0.1" )
MsgBox PingTest ( WScript.CreateObject("WScript.Network").ComputerName )
'**************************************************************
Function PingTest ( IPtst ) ' v3.A - http://dieseyer.de
'**************************************************************
Dim oExec, i
Set oExec = WScript.CreateObject("WScript.Shell").Exec("%comspec% /c Ping " & IPtst & " -n 1" )
Do Until oExec.status
WScript.Sleep 10
i = i + 1
If i > 100 Then oExec.Terminate
Loop
PingTest = "keine Antwort"
If InStr( oExec.StdOut.ReadAll() , "TTL=" ) <> 0 Then PingTest = "Antwort erhalten"
End Function ' PingTest ( IPtst ) ' v3.A - http://dieseyer.de
'**************************************************************
Wer die Beispielskripte zur WSHShell.Exec-Methode bis hier
ausprobiert hat, den werden die sich öffnenden und leeren
Eingabeaufforderungen (DOS-Boxen) stören. Um diese zu unterdrücken,
muss man tief in die Trickkiste greifen. Im Internet habe ich dazu
einen Beitrag mit zwei Beispielen gefunden: eine
ein-Skript-Variante
und eine
zwei-Skript-Variante.
Die
ein-Skript-Variante
startet sich mit CScript.exe
(im 'Unsichtbarmodus' und mit Parametern) selbst - bei
umfangreichen Skripten muss man das entsprechend am Skriptanfang
berücksichtigen. Vorteilhaft ist,
dass dafür nur eine (.VBS-) Datei nötig ist.
In der
zwei-Skript-Variante
ruft das Skript mit CScript.exe ein zweites (universelles)
Skript (im 'Unsichtbarmodus' und mit Parametern) auf. Um sicher zu
gehen, dass das zweite Skript auch wirklich immer vorhanden ist,
müsste man prüfen, ob es vorhanden ist und notfalls vom ersten Skript
schreiben lassen. Selbst umfangreichere Skripte dürften dadurch
übersichtlicher bleiben. Allerdings erfolgen jetzt wieder Schreibzugriffe
auf einen Datentäger, was eigentlich durch Verwendung der
WSHShell.Exec-Methode (für z.B. ping) vermieden werden sollte.
Da die
zwei-Skript-Variante
'nur' den Error-Code des aufgerufenen Skripts zurück gibt, habe ich
zwei Skripte geschrieben, die Ideen beider Varianten in sich vereinen:
QuellCode>
exec-hidden.vbs
schreibt bei
jedem
Aufruf der ExecHidden-Prozedur
eine neues Skript ExecHidden.VBS in das %Temp%-Verzeichnis,
startes dieses (und CScript.exe
die WSHShell.Exec-Methode im 'Unsichtbarmodus')
und zeigt die erhaltenen Ausgaben an.
QuellCode>
exec-hidden-plus.vbs
schreibt beim Aufruf der ExecHiddenPlus-Prozedur
ein neues Skript ExecHiddenPlus.VBS in das
%Temp%-Verzeichnis, wenn es dort
nicht vorhanden
ist. Was das Skript machen soll, erfährt es über die Parameter,
mit denen es aufgerufen wird. Natürlich startet das Skript
ExecHiddenPlus.VBS (über CScript.exe)
die WSHShell.Exec-Methode im 'Unsichtbarmodus'
und übergibt die erhaltenen Ausgaben an das aufrufende Skript.
QuellCode>
exec-test.vbs
erstellt eine .BAT-Datei, die dann gestartet wird.
Dieses Skript demonstriert, wie Ausgaben von Anwendungen ohne GUI
'abgegriffen' und wie Eingaben an diese 'gesendet' werden können.
QuellCode>
ip-adresse3.vbs
Damit die IP-Adresse mit IPCONFIG ermittelt werden kann, ohne dass eine
Schreiboperation auf einen Datenträger erfolgt, werden im 'unsichtbaren'
Aufruf von
QuellCode>
exechiddenplus.vbs
alle IPCONFIG-Ausgaben abgefangen.
↑ Zum Seitenanfang ↑
'SendTo' an ein Skript
Da Skripte eigentlich 'nur' den Sinn haben, wiederkehrende Aufgaben schnell
und präzise (ohne Tippfehler) auszuführen, wird man früher
oder später das 'Send To' bzw. 'Senden an' des Windows-Kontextmenüs
benutzen wollen. Das geht ganz einfach: das entsprechende Skript muss nur in das
'SendTo'-Verzeichnis kopiert werden.
Es steht als Unterverzeichnis
neben
dem Unterverzeichnis 'Startmenü'.
Allerdings gibt es unter WinNT/2k/XP davon mehrere:
C:\Winnt\Profiles\%XXX%\Startmenü bzw.
C:\Dokumente und Einstellungen\Profiles\%XXX%\startmenü,
wobei %XXX% der Anmeldename eines Benutzers ist, der sich
bisher mindestens einmal angemeldet hat, ODER 'All Users' ODER
'Default User' ist.
Ist im 'Senden an' - Kontextmenü ein Skript zu sehen, wird alles
'gesendete' als Argumente bzw. Aufrufparameter an das Skript übergeben -
und muss nur noch erfasst werden. Das wird in
'Datei(en) auf Skript ziehen und fallen lassen' erklärt.
↑ Zum Seitenanfang ↑
Argumente aus Batch-Aufrufen
Das Beispiel einer BAT-Datei, die als Parameter bzw. Argumente den
Inhalt von Umgebungsvariablen an ein Skript übergibt:
@echo BSP.BAT
@echo on
set stderr=txt.txt tttt
@rem - um das Gleichheitszeichen, also vor und nach dem Gleichheitszeichen,
@rem dürfen keine Leerschritte sein
@rem - in der Variable (hier STDERR) dürfen keine Leerzeichen sein, sonst werden
@rem sie im nachfolgenden Skript wie zwei übergebene Werte behandelt
@set
@pause
wscript bsp.vbs %stderr% %gibtsNicht% XxXxX %TMP% %unbeKANNt%
@rem - da %stderr% ein Leerzeichen hat, sind die beiden ersten Argumente
@rem (0) txt.txt und (1) tttt
@rem - da %gibtsNicht% leer ist, wird der Zähler nicht höher gesetzt
@rem - das dritte Argument ist (2) XxXxX
@rem - das vierte Argument ist (3) c:\temp
@rem (bzw. das, was in der Umgabungsvariable %tmp% gesetzt ist)
@rem - da %unbeKANNt% leer ist . . .
@pause
@pause
. . . und dieses bsp.vbs zeigt die Aufruf-Parameter an:
' bsp.vbs
set oArgs = Wscript.Arguments
Txt = ""
For i = 0 to oArgs.Count - 1 ' hole alle Argumente
Txt = Txt & i & " =[" & oArgs.item(i) & "]= " & vbCRLF
Next
MsgBox Txt
↑ Zum Seitenanfang ↑
Dateien auf Skript ziehen und fallen lassen
Dies entspricht dem 'Drag & Drop', bei dem Argumente in das Ziel
'kopiert' werden.
(Bei .BAT-Dateien sind die Argumente über %1..%9 erreichbar).
Das (Ziel-) Skript muss also ermitteln, ob und wenn ja wie viele Argumente
'rein gekommen' sind.
set oArgs = Wscript.Arguments
If oArgs.Count = 0 then
MsgBox "Ohne Argumente wird's nichts!", ,WScript.ScriptName
WScript.Quit
End If
Text = "Das waren die Argumente:" & vbCRLF
For i = 0 to oArgs.Count - 1 ' hole alle Argumente
Text = Text & oArgs.item(i) & vbCRLF
Next
MsgBox Text, ,WScript.ScriptName
↑ Zum Seitenanfang ↑
Leerzeichen im Dateinamen und Anführungszeichen in Zeichenketten
Etwas schwierig gestaltet sich die Arbeit mit Zeichenketten,
die Leerzeichen (Space) enthalten.
Bei WSHShell.Run "c:\eigene Dateien\neuer test.rtf"
würde MS-Word nicht erkennen, dass der alles zusammen
gehört und würde versuchen drei Dateien zu öffnen:
c:\eigene, Dateien\neuer und test.rtf.
Zieht man mit der Maus diese Datei in das Ausführen-Fenster ([Win-R]), wird
"c:\eigene Dateien\neuer test.rtf" (mit Anführungszeichen)
übergeben. Nahe liegend ist:
WSHShell.Run "wordpad "c:\eigene Dateien\neuer test.rtf"". Jetzt entsteht
ein neues Problem: Das Anführungszeichen nach wordpad beendet die Zeichenkette,
die mit dem Anführungszeichen vor wordpad begann.
Um in Zeichenketten Anführungszeichen einzufügen, sind zwei
Anführungszeichen direkt neben einander zu schreiben. Richtig ist also:
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "wordpad ""c:\eigene Dateien\neuer test.rtf"""
Damit leitet das erste Anführungszeichen eine Zeichenkette ein; die nächsten beiden
Anführungszeichen fügen in die Zeichenkette
ein Anführungszeichen ein; die drei letzten
Anführungszeichen fügen in die Zeichenkette
ein Anführungszeichen ein und beenden die
Zeichenkette.
Bei Zeichenketten-Operationen verhält es sich ähnlich:
Text = "Es ist jetzt " & time
MsgBox Text
Text = "Das ist die ""HOCHZEIT"" " & time
MsgBox Text
MsgBox "Es ist ""TESTZEIT " & time & """"
In der letzten Zeile überraschen die vier aufeinander folgenden Anführungszeichen:
das erste leitet eine Zeichenkette ein, die nächsten beiden fügen
ein
Anführungszeichen (in die Zeichenkette) ein und das letzte beendet die Zeichenkette.
Auf einen (meiner) Fehler bin ich in der
MS-NG
aufmerksam gemacht worden: "Die einzigen Fälle (IMHO), in welchen Pfade mit zusätzlichen
Anführungszeichen umschlossen werden, sind die WshShell.Run- und
WshShell.Exec-Methoden. ... Für das FSO ist das Leerzeichen aber ein ganz normales Zeichen, so wie
ein Buchstabe." sagte Christoph Basedau.
↑ Zum Seitenanfang ↑