2017-06-19 92 views
1

我有一個運行VBS的R腳本。將VBS中的參數傳遞給R

VB腳本應該通過參數發送回R.

我創建的代碼,但傳遞的參數仍然是NA。

R:

path <- "C:\\Users\\PD\\Desktop\\Dashboard Citi R\\test\\scripcik.vbs" 

shell(shQuote(normalizePath(path)), "cscript", flag = "//nologo") 

args<-commandArgs(TRUE) 
myvar<-args[1] 
print(myvar) 

VBS:

dim myArr 
Dim shell 
Set shell = CreateObject("WScript.Shell") 
chartpath6 = "C:\Users\PD\Desktop\Dashboard Citi R\test\bazy\" & myDate(now) & ".accdb" 
chartpath5 = "C:\Users\PD\Desktop\Dashboard Citi R\test\bazy\" & myDate(now)-1 & ".accdb" 

myArr = Array(chartpath6,chartpath5) 

for i = 0 to 1 
    ReportFileStatus(myArr(i)) 
next 

sub ReportFileStatus(filespec) 
    Dim fso, msg 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    If (fso.FileExists(filespec)) Then 
     msg = filespec & " exists." 
    Else 
     msg = filespec & " doesn't exist." 
    End If 
    msgbox msg 
End sub 

Function myDate(dt) 
    dim m,y 
    m = right("0" & datePart("m",dt),2) 
    y = datePart("yyyy",dt) 
    myDate= y & m 
End Function 

Dim path 

path = "Rscript C:\Users\PD\Desktop\Dashboard Citi R\test\runR.R " & msg 

shell.Run(path) 
+1

你試圖傳遞給Rscript的值是什麼?這裏期望的行爲是什麼?據我可以告訴你永遠不要在你的vbs腳本中初始化'msg'。你首先跑哪個腳本?看起來你正在設置一個無限循環來調用另一個它會幫助你,如果你提供了一個更多[可重現的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great- r-reproducible-example) – MrFlick

+0

我希望接收消息msg字符串作爲輸出。首先我運行R腳本,打開VBS。 VBS將msg字符串傳遞給R控制檯。 – Geron

+0

沒有無限循環。有創建數組(0到1)並通過兩個元素循環。 – Geron

回答

0

如果您嘗試發送變量是一個短信,你可以把它寫一個txt文件並從R循環,直到文本文件的值不爲空或空(我nerver試圖用R編碼),然後使用te的值xt文件。 (我也嘗試過wscript.echo「MYTEXT」,並從命令行運行它,但它猛擊了msgbox)。

+0

是的,我想過這種方式,但首先我想檢查是否有其他方式將變量直接從VBS傳遞給R。 – Geron

+0

也許這可能有所幫助:https://stackoverflow.com/questions/187040/how-do-i-return-an-exit-code-from-a-vbscript-console-application(與此行:WScript.Quit( returnValue)) – Tommy

+0

謝謝你的解決方案,但也沒有工作 – Geron