3

我在仅基于标签的引用/选择驱动器中找到了一个有用的脚本 ?(即,不是驱动器号),并且可以在cmd.exe窗口中或在 cygwin 下运行它以在我的计算机上查找驱动器号。

我想不通的是如何让返回的字符串(例如E:)显示在我的 R 控制台中。如果我跑步,system('cscript /nologo DriveFromLabel.vbs label',intern=TRUE)我会得到character(0)结果。

是否有一些开关可以使cmd.exe调用中的此注释的结果对 R 可见,或者是否有某种方法可以创建一个脚本来调用cygwin并将cscript结果返回给 R?

4

3 回答 3

2

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

echo spam 1>&2

也不会产生捕获的结果:

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

Linux下的解决方案现在是重定向stderrstdout

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

您可以查看此链接stderr以在 Windows 下进行重定向。还归功于 Brian Ripley对此 R-help 帖子的回答。的文档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:标题下。

于 2012-12-03T13:36:39.543 回答
2

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

于 2012-12-03T13:41:57.667 回答
1

这对我有用

 system('Cscript  /nologo your_path/DriveFromLabel.vbs DRIVE_LABEL',intern=TRUE)[1]
于 2012-12-03T13:49:42.870 回答