Logo faq-o-matic.net
Logo faq-o-matic.net

Ärger mit Anführungszeichen

von veröffentlicht am9. März 2009, 10:34 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Scripting, VBScript   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Es kommt manchmal vor, dass man mit VB Script einen recht einfachen Befehl ausführen will, z.B. diesen hier:

"c:\Program Files\attrib.exe" "c:\Mein Daten\Datei.txt" >
   "c:\Meine Daten\Output.txt"

Dies ist mit der run– oder exec-Methode kein großes Problem, bloß – es funktioniert nicht! Weshalb eigentlich?

Das vollständige Script sieht so aus:

Set oWshShell = CreateObject("WScript.Shell")
' Das Folgende ist eine einzige Zeile,
' nur zur Lesbarkeit umbrochen!
oWshShell.run "cmd.exe /c """"c:\Program Files\attrib.exe""
   ""c:\Meine Daten\Datei.txt"" > ""c:\Meine Daten\Output.txt"""""

Da sind doch mehrere Gestrüppe von Anführungszeichen! Nicht nur sind sie von bloßem Auge schwer zu trennen, es ist noch schwieriger zu sehen, wie viele an jedem Platz stehen sollten. Um Klarheit in diesen Wildwuchs zu bringen, gibt es drei einfache Tricks.

1. Die Dateinamen als Strings deklarieren:

sProgramm = "c:\Program Files\Anwendung\test.exe"
sParam1 = "c:\Meine Daten\Datei.txt"
sParam2 = "c:\Meine Daten\Output.txt"

2. Das doppelte Anführungszeichen („) als String deklarieren:

AFZ = """"

Nun sieht das Programm so aus:

sProgramm = "c:\Program Files\attrib.exe"
sParam1 = "c:\Meine Daten\Datei.txt"
sParam2 = "c:\Meine Daten\Output.txt"
AFZ = """"
Set oWshShell = CreateObject("WScript.Shell")
oWshShell.run "cmd.exe /c " _
& AFZ _  '***
& AFZ & sProgramm & AFZ & " " _
& AFZ & sParam1 & AFZ _
& " > " _
& AFZ & sParam2 & AFZ _
& AFZ  '***

Jeder Dateiname ist jetzt sichtbar von einem doppelten Anführungszeichen umrahmt – kein Problem! Allerdings – wozu die zusätzlichen Anführungszeichen, die im Beispiel mit *** markiert sind? Na ja, wenn man den Output eines Befehls in eine Outputdatei speisen will, dann muss man den Befehl mit cmd.exe einleiten, denn nur cmd.exe versteht das Symbol >. Damit cmd.exe weiß, wo der ganze Befehl anfängt und aufhört, braucht man eben noch einmal ein Paar von Anführungszeichen.

Und wenn’s immer noch nicht funktioniert? Dann anwendet man Trick Nr. 3 und macht den Befehl mit wscript.echo sichtbar, z.B. so:

sProgramm = "c:\Program Files\attrib.exe"
sParam1 = "c:\Meine Daten\Datei.txt"
sParam2 = "c:\Meine Daten\Output.txt"
AFZ = """"
sBefehl = "cmd.exe /c " _
& AFZ _
& AFZ & sProgramm & AFZ & " " _
& AFZ & sParam1 & AFZ _
& " > " _
& AFZ & sParam2 & AFZ _
& AFZ
Set oWshShell = CreateObject("WScript.Shell")
WScript.Echo sBefehl
oWshShell.run sBefehl

© 2005-2019 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!