我希望能够在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作为路径位置 我试图用''包围它,但这对我不起作用。有什么建议吗?
干杯 克里斯
答案 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