eldorado1
Goto Top

VBSrcipt wscript.shell.run mit relativer Pfadangabe und Parameterübergabe ausführen

Hallo,

ich habe eine HTML Anwendung (hta) geschrieben in der ich ein VBScript über einen Button aufrufe.
Meine Anwendung befindet sich im Verzeichnis: d:/a/b/xx/yy/Anwendung.hta

Mit dem VBS-Teil möchte ich dann eine .bat ausführen und dabei den Pfad relativ angeben sowie einen Parameter übergeben.

bisher habe ich es, mit absoluten Pfad, so:

Set Shell = createobject("wscript.shell")  

shell.run """d:/a/b/c/d/MeineBatch.bat"", "& Parameter &", true"  

Das oben habe ich irgendwo mal gefunden - kann aber leider nicht mehr angeben wo...

Die Syntax für Shell.Run lautet normal:

RückgabeWert = Shell.Run(Befehl, FensterTyp, warten)

nun möchte ich eben als Befehl die Batch ausführen indem ich einen relativen Pfad verwende und eben noch den Parameter übergeben.
Finde die bisherige Methode auch etwas verwirrend wegen den ganzen "-Zeichen da würde mir die andere Variante auch besser gefallen!

Relative Pfadangabe:

in einer batch kann man das ja mit ../ realisieren.

Set Shell = createobject("wscript.shell")  

shell.run """../../b/c/d/MeineBatch.bat"", "& Parameter &", true"  

Das Funktioniert so aber nicht. Bekomme die Fehlermeldung das die Datei nicht gefunden wird.
Und würde, wie bereits erwähnt, auch die andere Variante mit Return = Shell.Run () bevorzugen.

Danke

Gruß eldorado

Content-ID: 280608

Url: https://administrator.de/forum/vbsrcipt-wscript-shell-run-mit-relativer-pfadangabe-und-parameteruebergabe-ausfuehren-280608.html

Ausgedruckt am: 23.12.2024 um 15:12 Uhr

Clijsters
Clijsters 19.08.2015 um 15:10:05 Uhr
Goto Top
Hallo eldorado,

Was hältst du denn von
meinPfad = fso.GetParentFolderName(WScript.ScriptFullName)
Google ist dein Freund
Ansonsten bietet dir die Umgebung der hta (Also des IE) auch den aktuellen Arbeitspfad.

LG
Dominique
eldorado1
eldorado1 19.08.2015 aktualisiert um 16:31:33 Uhr
Goto Top
Hallo Dominique,

danke für deine Antwort.

Habe deinen Vorschlag wie folgend ergänzt bei mir.

Dim shell, meinPfad
set fso = CreateObject("Scripting.FileSystemObject")  
Set shell = createobject("wscript.shell")  
set meinPfad = fso.GetParentFolderName("wscript.ScriptFullName")  
MsgBox meinPfad

leider bekomme ich beim ausführen eine Fehlermeldung face-sad

Fehler: Objekt erforderlich: '[string: "(null)"]'

Habe es inzwischen soweit, dass mir nur noch das mit der relativen Pfadangabe fehlt

Set Path = "d:/a/b/c/d/"  
Set File = "MeineBatch.bat"  
Set Shell = createobject("wscript.shell")   
Return = shell.run(Path & File & " " & Parameter,,true)  

Wenn ich den Pfad so angebe funktioniert das leider nicht.
(In einer Batch kann ich ja so den Pfad relativ angeben - habe gehofft das funktioniert in VBS auch so)

Set Path = "../../../b/c/d/"  


Gruß
eldorado
114757
114757 19.08.2015 aktualisiert um 17:01:14 Uhr
Goto Top
Moin,
fso.GetParentFolderName("wscript.ScriptFullName")
das kann ja so nicht funktionieren, wenn du eine Funktion in Anführungszeichen kapselst face-wink

Das macht das gewünschte ..
Set objShell = CreateObject("Wscript.Shell")  
Set fso = CreateObject("Scripting.Filesystemobject")  
strPathBatch = fso.GetParentFolderName(WScript.ScriptFullName) & "\DeineBatch.bat"  
objShell.Run """" & strPathBatch & """ " & Parameter,0,True  
Die Anführungszeichen um den Batchpfad brauchst du wenn du Leerzeichen in deinem Pfad oder dem Dateinamen der Batch hast.
Zur Info: Um Einfache Anführungszeichen innerhalb einer Zeichenfolge zu erzeugen sind sie innerhalb des Strings zu verdoppeln, deswegen sind es für ein einzelnes Anführungszeichen insgesamt derer 4. Und nicht das Leerzeichen hinter dem Batchnamen vergessen, siehst du ja in Zeile 4...

Gruß jodel32
Clijsters
Clijsters 19.08.2015 um 17:22:40 Uhr
Goto Top
das kann ja so nicht funktionieren, wenn du eine Funktion in Anführungszeichen kapselst face-wink

...Und das war nicht mal ein gedankenloser Copy&Paste Fehler.
eldorado1
eldorado1 19.08.2015 aktualisiert um 17:28:04 Uhr
Goto Top
Wenn ich das teste

strPathBatch = fso.GetParentFolderName(WScript.ScriptFullName) & "\MeineBatch.bat"   
MsgBox strPathBatch

bekomme ich eine Fehlermeldung:

Fehler: Objekt erforderlich: "WScript"
in Zeile 1

Gruß eldorado
114757
114757 19.08.2015 aktualisiert um 17:40:31 Uhr
Goto Top
Ach das ist ja ne HTA ... dann muss das natürlich anders lauten:

Set objShell = CreateObject("Wscript.Shell")  
Set fso = CreateObject("Scripting.Filesystemobject")  

strHtmlPath = document.location.href
Set objThisFile = fso.GetFile(UnEscape(Replace(Right(strHtmlPath, Len(strHtmlPath) - 8), "/", "\")))  

strPathBatch = objThisFile.ParentFolder & "\DeineBatch.bat"  
objShell.Run """" & strPathBatch & """ " & Parameter,0,True  
Clijsters
Clijsters 19.08.2015 aktualisiert um 17:42:31 Uhr
Goto Top
Siehe hier...

@Eldorado:
Das hättest du auch finden können. z.B. dort: Klick

EDIT:
Meinen sinnfreien Halbsatz habe ich dann weggenommen, Jodel hat das dann nochmal detailliert ausgeführt.
eldorado1
eldorado1 24.08.2015 um 10:50:11 Uhr
Goto Top
Hallo,

ich weiß nicht ob ich jetzt irgendwo einen Denkfehler habe oder einfach nicht verstehe.

Wenn ich das jetzt ausführe bekomme ich das Verzeichnis in dem sich meine .hta befindet oder?
114757
114757 24.08.2015 aktualisiert um 10:52:10 Uhr
Goto Top
ich weiß nicht ob ich jetzt irgendwo einen Denkfehler habe oder einfach nicht verstehe.
Das weißt nur du ... zisch dir erst mal einen Kaffee face-wink
Zitat von @eldorado1:
Wenn ich das jetzt ausführe bekomme ich das Verzeichnis in dem sich meine .hta befindet oder?
Korrekt !
eldorado1
eldorado1 24.08.2015 um 10:59:46 Uhr
Goto Top
okay

Wenn das mein Verzeichnis für die .hta ist:

d:/a/b/xx/yy/Anwendung.hta

dann bekomme ich damit

strHtmlPath = document.location.href 
Set objThisFile = fso.GetFile(UnEscape(Replace(Right(strHtmlPath, Len(strHtmlPath) - 8), "/", "\")))   
strPathBatch = objThisFile.ParentFolder

strPathBatch = d:/a/b/xx/yy

mit jedem weiteren
strPathBatch.ParentFolder
komm ich dann eine Ebene weiter
also beim nächsten Aufruf wäre ich dann bei
d:/a/b/xx
114757
114757 24.08.2015 aktualisiert um 11:04:59 Uhr
Goto Top
Rischtisch ! Du kannst die Aufrufe auch gleich direkt hintereinander hängen, das kommt auf das selbe raus:
objThisFile.ParentFolder.ParentFolder.ParentFolder
https://msdn.microsoft.com/en-us/library/dt64ftxb%28v=vs.84%29.aspx
eldorado1
eldorado1 24.08.2015 um 11:09:18 Uhr
Goto Top
Okay

mein Denkfehler war ein Tippfehler - habe ich erst gerade gesehn.

Super Danke

funktioniert jetzt einwandfrei ;)
114757
114757 24.08.2015 um 11:14:56 Uhr
Goto Top
Zitat von @eldorado1:
funktioniert jetzt einwandfrei ;)
Dann noch ein gelöst hinten dran und alle sind zufrieden face-smile

Gruß jodel32