2017-06-19 60 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