我想说我想从R运行一个VBS脚本,我想将一个值从R传递给该脚本。
例如,在名为' Msg_Script.vbs'的简单文件中,我有代码:
Dim Msg_Text
Msg_Text = "[Insert Text Here]"
MsgBox("Hello " & Msg_Text)
如何在编辑R中的参数和/或变量时使用R运行此脚本?例如,在上面的脚本中,我如何编辑Msg_Text
变量的值?
答案 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")