vbs cmd路径空间

时间:2010-08-11 12:20:18

标签: vbscript path cmd space

我希望能够在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

就我而言,如果targetdir没有空格,例如c:\ bla,这将正常工作。然后该应用程序将安装在该特定文件夹中。

显而易见的问题是,如何定义带空格的targetdir作为路径位置 我试图用''包围它,但这对我不起作用。有什么建议吗?

干杯 克里斯

4 个答案:

答案 0 :(得分:4)

带空格的路径通常用引号字符(")括起来。在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

答案 1 :(得分: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 

答案 2 :(得分: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"

答案 3 :(得分: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