2016-01-27 10 views
0

У меня есть followaing run.vbs сценарийRun Rscript.exe с VBScript и пробелы в пути

Rexe   = "R-Portable\App\R-Portable\bin\Rscript.exe" 
Ropts   = "--no-save --no-environ --no-init-file --no-restore --no-Rconsole " 
RScriptFile = "runShinyApp.R" 
Outfile  = "ShinyApp.log" 
startChrome = "GoogleChromePortable\App\Chrome-bin\chrome.exe --app=http://127.0.0.1:9999" 
strCommand  = Rexe & " " & Ropts & " " & RScriptFile & " 1> " & Outfile & " 2>&1" 

intWindowStyle = 0 ' Hide the window and activate another window.' 
bWaitOnReturn = False ' continue running script after launching R ' 

' the following is a Sub call, so no parentheses around arguments' 

CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn 
WScript.Sleep 1000 
CreateObject("Wscript.Shell").Run startChrome, intWindowStyle, bWaitOnReturn 

Он работает очень хорошо в большинстве случаев, за исключением, когда пользователь помещает скрипт run.vbs в папке с пробелами от его имени: напр. если run.vbs находится в папке «foo bar», пользователь получает ошибку: «C: \ Users \ [имя пользователя] \ Desktop \ foo» не распознается как внутренняя команда ...

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

Я слышал о двойные кавычки решения, используя абсолютный путь, но это не похоже на работу с EXE-скриптов (это делает, хотя с .bat и .cmd)

Спасибо за любую помощь!

+0

ли рабочий каталог правильно, когда ваш скрипт выполняется? 'MsgBox CreateObject (« Wscript.Shell »). CurrentDirectory' - Если да, вы можете просто построить цитируемый полный путь самостоятельно. – krlmlr

+0

@krlmlr На самом деле я новичок в vbs, и даже если я заменил Rexe на 'Rexe =" "" C: \ Users [имя пользователя] \ Desktop \ foo bar \ R-Portable \ App \ R-Portable \ bin \ Rscript.exe "" " Я все еще получаю ту же ошибку. Я не знаю, правильно ли это сделать. –

+0

@krlmlr У меня был более глубокий взгляд на него, и кажется, что решение с двойной кавычкой не работает с .exe-файлами (хотя и с .bat и .cmd). Я редактировал сообщение –

ответ

0

Ниже кода поможет вам

Dim oShell As Object 
Set oShell = CreateObject("WScript.Shell") 
    'run command' 
    Dim oExec As Object 
    Dim oOutput As Object 
    Set oExec = oShell.Exec("C:\Program Files\R\R-3.2.3\bin\Rscript.exe C:\subfolder\YourScript.R " & """" & var1 & """") 
    Set oOutput = oExec.StdOut 

обрабатывать результаты, как они записываются и считываются из StdOut объекта

Dim s As String 
Dim sLine As String 
While Not oOutput.AtEndOfStream 
    sLine = oOutput.ReadLine 
    If sLine <> "" Then s = s & sLine & vbCrLf 
Wend