2016-05-16 5 views
4

Ich habe versucht, myFileToRun.bat-Datei von einem Pfad zum Beispiel zu starten.Nicht in der Lage, Bat-Datei Formular VBScript zu starten, wenn Pfad ein Leerzeichen enthält

D:\My Folder\batchfiles\myFileToRun.bat 

Unten ist das VBScript, durch das ich versuche, es auszuführen.

Dim WshShell, strCurrentDirectory 
Set WshShell = CreateObject("WScript.Shell") 
strCurrentDirectory = WshShell.CurrentDirectory 
WshShell.Run strCurrentDirectory & "\myFileToRun.bat" , 0 
Set WshShell = Nothing 

Ich bin nicht in der Lage, es zu laufen, als VBS Fehler thowing sayin „System die angegebene Datei nicht finden kann:“ Ich habe in anderen ähnlichen Stellen in Stackoverflow und anderen Foren erwähnten verschiedene Methoden ausprobiert. Die meisten von ihnen sagen, doppelte Anführungszeichen hinzuzufügen.

Anmerkung: Ich habe doppelte Anführungszeichen versucht, das Hinzufügen, Doppel doppelte Anführungszeichen zum Beispiel

1.WshShell.Run """strCurrentDirectory & "\myFileToRun.bat" "", 0 
2.WshShell.Run """"strCurrentDirectory & "\myFileToRun.bat"""", 0 
3.WshShell.Run """"strCurrentDirectory & \myFileToRun.bat"""", 0 

Keiner von ihnen arbeitete, wie ich glaube, ich Zitate an falschen Stellen gebe. Die Variable strCurrentDirectory ändert sich in "strCurrentDirectory" anstelle von "D: \ My Folder \ Batchfiles" und mein endgültiger Pfad wäre "strCurrentDirectory" "\ myFileToRun.bat", was falsch ist. Ich brauche den Pfad zu "D: \ Mein Ordner \ Batchfiles \ myFileToRun.bat" und die Datei zu laufen.

Ich habe das Konzept dieser Zitate nicht wirklich verstanden. Also kannst du mir bitte dieses Konzept erklären und mir helfen, diesen Fehler zu beheben.

Edit: Ich habe die Lösung. Da ich mich auf das aktuelle Verzeichnis beziehen musste, habe ich das Skript einfach gemacht.

Dim WshShell 
Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run "myFileToRun.bat", 0 
Set WshShell = Nothing 

Vielen Dank für Ihre Antworten. Es war hilfreich.

+0

Mögliches Duplikat von [VBScript-Fehler beim Ausführen Befehl mit langen Argument] (http://StackOverflow.com/Questions/35503447/Vbscript-error-on-Run-Command-with-long-argument) – Lankymart

+0

Sie müssen nur Escape alle Zitate, die Sie als Teil des Arguments wollen, tun Sie dies, indem Sie sie '' '' verdoppeln. Ihre Versuche funktionieren nicht, weil Sie vergessen haben, die Zeichenkette * zu verketten (deshalb wird die Variable 'strCurrentDirectory' als Teil der Zeichenkette anstelle ihres Werts hinzugefügt) *, versuchen Sie dies -' WshShell.Run "" "" & strCurrentDirectory & "\ myFileToRun.bat" "", 0' – Lankymart

Antwort

2

versuchen wie folgt aus:

Dim WshShell, strCurrentDirectory 
Set WshShell = CreateObject("WScript.Shell") 
strCurrentDirectory = WshShell.CurrentDirectory 
WshShell.Run """" & strCurrentDirectory & "\di r\myFileToRun.bat" & """" , 0 
Set WshShell = Nothing 
+2

Was ist mit dem '&" "" "' am Ende ?, keine Notwendigkeit, dort zu verketten, einfach 'WshShell.Run" "" "& strCurrentDirectory &" \ di r \ myFileToRun.bat "" ", 0". – Lankymart

+1

Was das tut ... Ende des Tages ist es nur eine Zeichenfolge '&" "" "' tut nichts, das '" "" 'nicht. – Lankymart

+2

@Lankymart - ahh richtig. Schließlich könnte verwendet werden, wenn der Bat-Dateiname – npocmaka

1

Diese Funktion doppelte Anführungszeichen in Variablen hinzufügen können:

Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 

So wird der Code zum Lesen einfach:

Dim WshShell, strCurrentDirectory 
Set WshShell = CreateObject("WScript.Shell") 
strCurrentDirectory = WshShell.CurrentDirectory 
wscript.echo DblQuote(strCurrentDirectory & "\My Folder\myFileToRun.bat") 
WshShell.Run DblQuote(strCurrentDirectory & "\My Folder\myFileToRun.bat"),0 
Set WshShell = Nothing 
'******************************************************************** 
Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
'******************************************************************** 
+0

Ich habe das versucht und es wird immer noch den Fehler werfen, da strCurrentDirectory als ein betrachtet wird Literal und Pfad würde "strCurrentDirectory" werden \ myFileToRun.bat –

+0

Das wird nicht funktionieren, weil die 'DblQuote()' Funktion 'DblQuote = Chr (34) & Chr (34) & Str & Chr (34) & Chr. sein muss (34) ', du verdoppelst nicht die Anführungszeichen – Lankymart

+0

@VikasVicky Wenn du folgendes ausführst:' wscript.echo DblQuote (strCurrentDirectory & "\ Mein Ordner \ myFileToRun.bat") 'Was hast du als Ergebnis bekommen? – Hackoo

2

Sie müssen nur die Anführungszeichen in der Zeichenfolge korrekt umgehen, die Regel ist immer dann, wenn Sie ein Anführungszeichen in einer Zeichenfolge anzeigen möchten uble es.

Also, dieser Befehl

WshShell.Run strCurrentDirectory & "\myFileToRun.bat" , 0 

Im Moment wird als übergeben werden;

D:\My Folder\batchfiles\myFileToRun.bat 

Wie bei den meisten Windows-Programme Pfade mit Leerzeichen mit Anführungszeichen umgeben werden müssen, wenn Sie den vollständigen Pfad, um sicherzustellen, übergeben wird anerkannt, im Moment Run() sieht

D:\My 

und den Rest als Argument an das Programm My übergeben.Da das System nicht in der Lage sein, das My Programm zu finden, führt dazu, dass das

System die Datei

angegebene Fehler nicht finden kann.

dies beheben wir eine Zeichenfolge in Anführungszeichen (Verdoppelung der Angebote für jedes wörtliche Zitat wir aufnehmen wollen)

WshShell.Run """" & strCurrentDirectory & "\myFileToRun.bat""", 0 

, die als übergeben müssen weitergegeben werden;

"D:\My Folder\batchfiles\myFileToRun.bat" 

Hinweis: Wenn mit Variablen verketten müssen wir noch öffnen und die Zeichenfolge richtig zu schließen. Für eine Situation wie oben verketten wir die Zeichenkette """" mit einer Variablen, die einfach "" ist, aber mit einem öffnenden und schließenden Zitat, um die literale Zeichenkette zu bezeichnen.

Auch müssen Variablen korrekt an die Zeichenfolge verkettet werden oder werden Sie seltsame Ergebnisse erhalten, zum Beispiel Ihre erste Versuch, die Zeichenfolge

WshShell.Run """strCurrentDirectory & "\myFileToRun.bat" "", 0 

würde dazu führen, zu entkommen;

Erwartete Ende der Anweisung

weil es kein richtig terminierten String ist.

+1

Vielen Dank für die Erläuterung im Detail. Habe ein klares Verständnis. –

+0

@VikasVicky Kein Problem, froh zu helfen. – Lankymart

Verwandte Themen