如何将vbs脚本的输出返回给R控制台?

时间:2012-12-03 13:25:40

标签: windows r cygwin

我在Refer to/select a drive based only on its label? (i.e., not the drive letter)找到了一个有用的脚本,可以在cmd.exe窗口或cygwin下运行,以便在我的计算机上找到驱动器号。

我无法弄清楚如何让返回的字符串(例如E:)显示在我的R控制台中。如果我运行system('cscript /nologo DriveFromLabel.vbs label',intern=TRUE),我会得到character(0)作为结果。

是否有一些转换可以在cmd.exe调用R中显示此注释的结果,或者是否有某种方法可以创建调用cygwin的脚本并返回cscript结果是R?

3 个答案:

答案 0 :(得分:2)

可能cscript写入stderr而不是stdout。使用以下Bash脚本(test.sh)的小示例:

echo spam 1>&2

也不会产生任何捕获结果:

> spam = system("./test.sh", intern = TRUE)
spam
> spam
character(0) 

Linux下的解决方案现在是将stderr重定向到stdout

> spam = system("./test.sh 2>&1", intern = TRUE)
> spam
[1] "spam"

您可以查看this link以在Windows下重定向stderr。也归功于Brian Ripley对this R-help post的回答。 system的文档证实了我的故事:

For command-line R, error messages written to ‘stderr’ will be
sent to the terminal unless ‘ignore.stderr = TRUE’.  They can be
captured (in the most likely shells) by

   system("some command 2>&1", intern=TRUE)

Stdout and stderr:标题下。

答案 1 :(得分:2)

我想我找到了一条路: system("C:/cygwin/bin/bash.exe ./doletter.sh",intern=TRUE),其中包含doletter cscript /nologo DriveFromLabel.vbs label'成功返回了驱动器号 现在我只需要做一些技巧就可以将所需的“标签”字符串加载到shell脚本中,这可以通过R函数从头开始创建doletter.sh文件来“轻松”完成。

答案 2 :(得分:1)

这对我有用

 system('Cscript  /nologo your_path/DriveFromLabel.vbs DRIVE_LABEL',intern=TRUE)[1]