【问题标题】:Problems with spaces in paths when calling a batch file from R从 R 调用批处理文件时路径中的空格问题
【发布时间】:2014-01-01 07:33:41
【问题描述】:

我在 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)

【问题讨论】:

  • 如果我使用这种语法:system('../rgames/test space/norun.bat') 我没有错误消息。看看你是否可以对你的路径做同样的事情。

标签: r batch-file system command-prompt


【解决方案1】:

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

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%作为参数传递。

【讨论】:

  • 对不起,我还是不太明白——你的意思是我应该把它放在一个批处理文件中,然后从 R 调用这个批处理文件?但是有没有办法让我直接在 R 中完成所有操作,而无需先制作批处理文件?
  • 您可以从批处理中调用R 并将这些作为命令行参数传递...我从未使用过R,但您可以检查是否可以使用它获取短名称。跨度>
【解决方案2】:

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

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

【讨论】:

  • 非常感谢!做到了!是的,我还需要在参数中引用路径!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2021-03-31
相关资源
最近更新 更多