VBScript:
Dim oWSHShell Dim Aufruf Aufruf = """C:\Program Files\irgendeine.exe""" ' Auf Leerzeichen achten, oftmals Maskierung sinnvoll Set oWSHShell = CreateObject("WScript.Shell") oWSHShell.Run Aufruf
Um einen Pfad nachträglich zu maskieren, benötigt man reichlich Anführungszeichen:
Pfad = """" & Pfad & """" 'oder wenn sowieso die Zeichenkette zusammengesetzt werden muss Pfad = Chr(34) & Pfad & Chr(34)
JScript:
function openProg(progname) { // progname = Pfad zum Programm (String) var oWSHShell = new ActiveXObject("WScript.Shell"); oWSHShell.Run(progname, 10, true); }
Manchmal ist es sinnvoll, einen DOS-Befehl aus einer Skriptdatei heraus auszuführen. Dabei muss der Pfad zum Kommandozeileninterpreter (command.com oder cmd.exe) expliziet angegeben werden, was über die Umgebungsvariable COMSPEC geschehen kann.
Nachfolgendes Beispiel zeigt den Inhalt von C:\ an:
Set ws = CreateObject("WScript.Shell") ws.Run "%COMSPEC% /K DIR C:\",1
%COMSPEC% ist je nach Betriebssystem die Umgebungsvariable für command.com oder cmd.exe
%COMSPEC% /K bedeutet: Eingabeaufforderung bleibt geöffnet
%COMSPEC% /C bedeutet: Schließen der Eingabeaufforderung nach Ausführung des Befehls
Grundsätzlich poppt eine Eingabeaufforderung auf. Diese kann jedoch unterdrückt werden. Das nachfolgende Beispiel läuft unsichtbar ab und löscht eine Datei:
Set ws = CreateObject("WScript.Shell") ws.Run "%COMSPEC% /C DEL C:\test.txt",0
Ruft man per Skript ein externe Kommandozeilentool auf und möchte die Rückgabewert dieses Tools im Skript weiterberarbeiten, so scheitert einen Umleitung der Programmausgaben mittels ">" bzw. "»" in eine Datei. Es tritt dann ein Fehler auf. Es gelingt aber mit dem Windows Scripting Host-Befehl WshShell.Exec
VBScript:
'Bsp.: Ausgabe des DIR-Befehls Aufruf = "%COMSPEC% /C DIR C:\" Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec(Aufruf) Ausgabe = oExec.StdOut.readall MsgBox Ausgabe
Das führt aber zu dem unschönen Effekt, dass sich kurz ein DOS-Fenster öffnet. Um das zu umgehen kann der Aufruf mit Hilfe der Funktion ExecHidden realisiert werden:
VBScript:
'Bsp.: Ausgabe des DIR-Befehls Aufruf = "%COMSPEC% /C DIR C:\" Ausgabe = ExecHidden (Aufruf) MsgBox Ausgabe Function ExecHidden (CMD) ' v3.A - Quelle: http://dieseyer.de/dse-wsh-scr-b.html Dim FileOut, oWsh, Tmp CMD = Replace( CMD, """", """""" ) Tmp = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") & "\" & "ExecHidden.VBS" Set FileOut = CreateObject("Scripting.FileSystemObject").OpenTextFile( Tmp , 2, true) FileOut.WriteLine( " Set oExec = WScript.CreateObject(""WScript.Shell"").Exec(""" & CMD & """) " ) FileOut.WriteLine( " WScript.CreateObject(""WScript.Shell"").Environment( ""volatile"" )( ""Eregbnis"" ) = oExec.StdOut.ReadAll() " ) FileOut.Close Set FileOuT = nothing Set oWsh = CreateObject("WScript.Shell") oWsh.Run "CScript.exe //NOLOGO " & Tmp , 0, true ExecHidden = oWsh.Environment("volatile")( "Eregbnis" ) 'zum Löschen der 'Tmp-Datei nächste Zeile frei geben CreateObject("Scripting.FileSystemObject").DeleteFile( Tmp ) End Function
In gleicher Weise können auch Webseiten aufgerufen werden
VBScript:
Dim oWSHShell Set oWSHShell = CreateObject("WScript.Shell") oWSHShell.Run "http://www.fixfoto.info/"
JScript:
function openLink(url) { // url = Link zur Website (String) var oWSHShell = new ActiveXObject("WScript.Shell"); oWSHShell.Run(url,0,false); }