VBS CMD пробел - PullRequest
       42

VBS CMD пробел

2 голосов
/ 11 августа 2010

Я хотел бы иметь возможность вызвать следующую команду cmd из сценария VBS:

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. Тогда приложение будет установлено в эту конкретную папку.

Очевидный вопрос: как я могу определить targettdir с пробелами в качестве местоположения пути.
Я пытался окружить это '', но это не сработало для меня. Есть предложения?

Приветствие Крис

Ответы [ 4 ]

4 голосов
/ 11 августа 2010

Пути с пробелами обычно заключаются в кавычки ("). В 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 голосов
/ 07 ноября 2017

Это не совсем описанная проблема, поскольку вызываемая программа, а не параметр, содержит пробел. Погуглив "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
0 голосов
/ 18 апреля 2017

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)

Затем отменить C: \ Program Files \ с PROGRA ~ 1.

2 、 использовать двадвойные кавычки в полном пути.

WScript.CreateObject("WScript.Shell").Run """C:\Program Files\DirName\FileName.exe"" /option1 value1 /option2 vaule2 argv3"
0 голосов
/ 07 февраля 2017

Я закончил с

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 
...