Используйте VBS для запуска программы с параметрами - PullRequest
2 голосов
/ 17 октября 2019

Я всего лишь новичок в VBS, пытающийся выполнить предположительно простую задачу использования VBScript для запуска одной программы (с параметрами).

Путь к программе: C: \ Program Files (x86) \ SpeedyFox \ speedyfox.exe и переключатель параметров, который должен идти вместе с ним: / Firefox: C: \ Program Files \ Firefox \ Data \профиль

Если обернуть оба раздела в кавычки (из-за пробелов в их путях), это даст следующую объединенную единую команду:

"C:\Program Files (x86)\SpeedyFox\speedyfox.exe" "/Firefox:C:\Program Files\Firefox\Data\profile"

Если я вставлю это в Пуск> Выполнить , это будет работать именно так, как я хочу.

Я просто пытаюсь добиться того же самого из скрипта vbs вместо того, чтобы вручную вставлять в поле Run .

Я не хочу, чтобы команда выполнялась в консоли CMD (как уже задавали другие вопросы). Все, что я пытаюсь сделать, - это заставить "C:\Program Files (x86)\SpeedyFox\speedyfox.exe" "/Firefox:C:\Program Files\Firefox\Data\profile" работать с shell.ShellExecute строки приведенного ниже сценария.

Set objShell = Wscript.CreateObject ("Wscript.shell")
set shell=CreateObject("Shell.Application")
shell.ShellExecute  ** WHAT DO I PUT HERE? **
set shell=nothing

но, как я мог бы, я просто продолжаю получатьWSH « Ожидаемый конец оператора » сообщения об ошибках.

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вздох, напоминает мне о моих днях VBScript, теперь я использую Ruby, и это так же просто, как

´my_shell_command params´

Однако вернемся к вашему вопросу: самый короткий способ использовать ShellExecute -

CreateObject("Shell.Application").ShellExecute "application", "parameters", "dir", "verb", window

См. эту документацию для объяснения параметров.

РЕДАКТИРОВАТЬ: Вы должны обратить внимание на кавычки, они должны быть переданы в оболочку также с помощью двух кавычек

например CreateObject("Shell.Application").ShellExecute "C:\Program Files (x86)\SpeedyFox\speedyfox.exe", """/Waterfox:C:\Program Files\Waterfox\Data\profile"""

1 голос
/ 17 октября 2019

1.Первый: Рекомендую вам Сделать привычкой использовать эту функцию кавычек, чтобы вам было легко заключать в кавычки переменные в этих ситуациях!

2. Второе: Вы должны использовать MsgBox или Wscript.echo, чтобы легко отображать и отлаживать переменные!

Wscript.echo DblQuote("Hello World !")
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function

Итак, я скачал это приложение (speedyfox.exe) и япроверил это на моем Windows 10 (32 бита)

Итак, вот что я протестировал, и он работает как брелок на моей стороне:

Option Explicit
Dim objShell,MyCommand,strProgramFiles,SpeedyFoxfile,Title
Title = "Execute SpeedyFox in Commandline"
Set objShell = CreateObject("Shell.Application")
strProgramFiles = GetProgramFilesPath()
SpeedyFoxfile = strProgramFiles & "\SpeedyFox\speedyfox.exe"
MsgBox "Without Double Quotes" & vbCrlf & SpeedyFoxfile,vbInformation,Title
MsgBox "With Double Quotes" & vbCrlf & DblQuote(SpeedyFoxfile),vbInformation,Title
MyCommand = "CD /D "& DblQuote(strProgramFiles &"\SpeedyFox\") &"&"& DblQuote(SpeedyFoxfile) & " " & DblQuote("/Firefox:default") & " " & DblQuote("/Chrome:Default")
MsgBox MyCommand,vbInformation,Title
Call Execute(MyCommand) 
'-----------------------------------------
Function Execute(StrCmd)
   Dim ws,MyCmd,Result
   Set ws = CreateObject("wscript.Shell")
   MyCmd = "CMD /K " & StrCmd & ""'
   Result = ws.run(MyCmd,1,True)
   Execute = Result
End Function
'-----------------------------------------
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function
'-----------------------------------------
Function GetProgramFilesPath()
Dim ws,OsType,strProgramFiles
Set ws = createObject("WScript.Shell")  
OsType = ws.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")    
    If OsType = "x86" then    
        strProgramFiles = ws.ExpandEnvironmentStrings("%PROGRAMFILES%")  
    elseif OsType = "AMD64" then   
        strProgramFiles = ws.ExpandEnvironmentStrings("%PROGRAMFILES(x86)%")  
    end if 
GetProgramFilesPath = strProgramFiles
End Function
'-----------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...