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
http://faq-o-matic.net/?p=1183