2010-08-11 106 views
0

我希望能夠從一個VBS腳本中調用下面的cmd命令:VBS CMD路徑空間

cmd Client\setupclient.exe /q /targetdir "c:\program files\Microsoft CRM" 

我想出了以下VBS腳本:

Set oShell = WScript.CreateObject ("WScript.Shell") 
oShell.Run "cmd /c Client\setupclient.exe /q /targetdir c:\program files\Microsoft CRM", 1, true 

據就我而言,如果targettdir沒有空格,例如c:\ bla,這可以正常工作。然後,該應用程序將安裝在該特定文件夾中。

一個顯而易見的問題是,我如何定義帶空格的targetdir作爲路徑位置。
我試圖用''圍繞它,但那對我沒有用。有什麼建議麼?

乾杯 克里斯

回答

2

與空格的路徑通常用引號字符(")。在VBScript中,要將引號字符插入到字符串中,請使用雙引號("")。所以,你的代碼應該是這樣的:

oShell.Run "cmd /c Client\setupclient.exe /q /targetdir ""c:\program files\Microsoft CRM""", 1, true 

而且,我如果實際上這裏需要cmd /c不知道,所以它可能以這種方式工作,以及:

oShell.Run "Client\setupclient.exe /q /targetdir ""c:\program files\Microsoft CRM""", 1, true 
0

我結束了

AMPath = "E:\Program Files (x86)\Dropbox\Client\Dropbox.exe" 
If FileSyst.Fileexists(AMPath) Then 
AMPath = chr(34) & AMPath & chr(34) 
OBJ_Shell.run (AMPath) 
End If 
0

1,如果你的操作系統支持8.3文件名,可以嘗試短文件名:

cd c:\ 
dir /x 
2017/04/17 20:53 <DIR>   PROGRA~1  Program Files 
2017/04/18 03:40 <DIR>   PROGRA~2  Program Files (x86) 

然後用PROGRA〜1代替C:\ Program Files \。

2,在完整路徑中使用兩個雙引號。

WScript.CreateObject("WScript.Shell").Run """C:\Program Files\DirName\FileName.exe"" /option1 value1 /option2 vaule2 argv3" 
0

這不是所描述的問題,因爲被調用的程序而不是參數包含空格。谷歌搜索「whshell.run不起作用,如果文件名包含空白」讓我在這裏。

當被調用的程序名稱中包含空格時,需要用三重引號。 (開始和結束引號定義了一個帶空格的字符串,並將所包含的雙引號映射到該字符串中的單引號。)有兩個工作示例。第一個使用三重引號。第二個有效地從名稱中刪除空白。非工作示例顯示不該做什麼(以及我首先嚐試了什麼)。

' Drive D:\Program Files\Batch\Monitor.bat with no associated command window 

Set WshShell = CreateObject("WScript.Shell") 

' These methods work: (Select one) 
    Return = WshShell.Run("""D:\Program Files\Batch\Monitor.bat""", 0) 
' Return = WshShell.Run("D:\.D-DISK\Monitor.bat", 0) 
' Note: Here "D:\.D-DISK\Monitor.bat" is a symbolic link to 
'  "D:\Program Files\Batch\Monitor.bat" 

' The following methods fail because of the space in the filename. 
' WshShell.Run(chr(34) & D:\Program Files\Batch\Monitor.bat & Chr(34), 0) 
' Return = WshShell.Run("D:\Program Files\Batch\Monitor.bat", 0) 
' Return = WshShell.Run(""D:\Program Files\Batch\Monitor.bat"", 0) 

Set WshShell = Nothing