从R调用批处理文件时路径中的空格问题

时间:2013-12-13 13:47:28

标签: r batch-file system command-prompt

在Windows中使用system()从R调用名为molconvert的命令行程序时遇到一些问题。 molconvert位于"C:\Program Files\ChemAxon\MarvinBeans\bin" 然后,我想调用system()shell()来模仿我将通过输入

来实现的目标
molconvert pdb "C:\molecule conversions\cembrene A.mol"
在命令提示符处

并将结果输出收回到R,如

out=system(...,intern=T)

我似乎遇到了反斜杠和路径中的空格。 我试过

dirmolconvert="C:\\Program Files\\ChemAxon\\MarvinBeans\\bin"
shell(shQuote(paste(dirmolconvert,"\\molconvert pdb "C:\\cembrene A.mol",sep="")))

但是这给了我“错误:......中的意外符号”并且逃避“也没有帮助。有关我应该如何解决这个问题的任何想法?

system(paste(dirmolconvert,"\\molconvert pdb \"C:\\cembrene A.mol\"",sep=""), intern=T)

但是这给了我

'C:\Program' not found

有什么想法吗?

编辑: 基于下面的答案,正确的方法显然是

inputdir="C:/Users/Ento/Documents/GCMS/molconvert test"
molconvertdir="C:/Program Files/ChemAxon/MarvinBeans/bin"
molecule="cembrene A.mol"
out=system(paste(shQuote(file.path(molconvertdir, "molconvert.bat")),
             "pdb",
             shQuote(file.path(inputdir,molecule))),intern=T)

2 个答案:

答案 0 :(得分:2)

您希望使用shQuote引用可执行文件路径,而不是整个命令行。根据您的molconvert程序所期望的内容,您可能还需要引用作为其参数的路径。

system(paste(shQuote(file.path(dirmolconvert, "molconvert.exe")),
             "pdb",
             shQuote("C:\\molecule conversions\\cembrene A.mol"))

答案 1 :(得分:0)

解决此问题的最简单方法是使用短路径:

for %%a in ("C:\molecule conversions\cembrene A.mol") set "sh_path=%%~dpfnxsa"

for %%a in ("C:\Program Files\ChemAxon\MarvinBeans\bin") do set "pf_sh_path=%%~dpfnxsa"

然后将%sh_path%%pf_sh_path%作为参数传递。