如何从R运行VBS脚本,同时将参数从R传递到VBS

时间:2017-08-10 19:56:50

标签: r vbscript

我想说我想从R运行一个VBS脚本,我想将一个值从R传递给该脚本。

例如,在名为' Msg_Script.vbs'的简单文件中,我有代码:

Dim Msg_Text

Msg_Text = "[Insert Text Here]"

MsgBox("Hello " & Msg_Text)

如何在编辑R中的参数和/或变量时使用R运行此脚本?例如,在上面的脚本中,我如何编辑Msg_Text变量的值?

2 个答案:

答案 0 :(得分:2)

另一种方法是将值作为argument to the VBScript

传递

您可以按如下方式编写VBS:

Dim Msg_Text
Msg_Text = WScript.Arguments(0)
MsgBox("Hello " & Msg_Text)

然后你在R中创建一个系统命令,如下所示:

system_command <- paste("WScript",
                        '"Msg_Script.vbs"',
                        '"World"',
                        sep = " ")
system(command = system_command,
       wait = TRUE)

此方法按位置匹配参数。 如果需要,可以使用命名参数。这样,您的VBS将如下所示:

Dim Msg_Text
Msg_Text = WScript.Arguments.Named.Item("Msg_Text")
MsgBox("Hello " & Msg_Text)

然后你在R中创建一个系统命令,如下所示:

system_command <- paste("WScript",
                        '"Msg_Script.vbs"',
                        '/Msg_Text:"World"',
                        sep = " ")
system(command = system_command,
       wait = TRUE)

答案 1 :(得分:0)

这是一个有些讨厌的解决方案:

将vbs脚本中的行读入R(使用readLines()):

vbs_lines <- readLines(con = "Msg_Script.vbs")

通过查找和替换特定文本来编辑R中的行:

updated_vbs_lines <- gsub(x = vbs_lines,
                          pattern = "[Insert Text Here]",
                          replacement = "World",
                          fixed = TRUE)

使用更新的行创建新的VBS脚本:

writeLines(text = updated_vbs_lines,
           con = "Temporary VBS Script.vbs")

使用系统命令运行脚本:

full_temp_script_path <- normalizePath("Temporary VBS Script.vbs")
system_command <- paste0("WScript ", '"', full_temp_script_path, '"')

system(command = system_command,
       wait = TRUE)

运行后删除新脚本:

file.remove("Temporary VBS Script.vbs")