我在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?
答案 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]