使用R中的shell()运行.bat文件

时间:2011-09-12 20:27:18

标签: r pdf cmd

我正在使用PDFSam的控制台来拆分和合并一些PDF文件。我可以使用.bat文件半自动执行此操作,但我想在R中完成所有操作。

我的.bat文件中的代码有效:

C:
cd "/Program Files/pdfsam/bin/"
run-console.bat -f "d:/delete/A_9.pdf" -o d:/delete -s BURST -overwrite split

但是我的R shell命令中的这个“等效”代码没有返回错误,但似乎不起作用。

shell('C: 
cd "/Program Files/pdfsam/bin/"
run-console.bat -f "d:/delete/A_9.pdf" -o d:/delete -s BURST -overwrite split')

我的shell命令中是否缺少一个选项?我已经尝试了一些在shell中列出的选项但无济于事。

我正在使用Windows XP和 R版本2.13.1(2011-07-08) 平台:i386-pc-mingw32 / i386(32位)

谢谢, 汤姆

2 个答案:

答案 0 :(得分:4)

您可以通过&连接将多个命令传递给shell,因此下面应该有效:

shell('C: & cd C:/Program Files/pdfsam/bin & run-console.bat -f "d:/delete/A_9.pdf" -o d:/delete -s BURST -overwrite split')

但作为一种解决方法,您可以临时更改R工作目录:

current.wd <- getwd()
setwd("C:/Program Files/pdfsam/bin")
shell('run-console.bat -f "d:/delete/A_9.pdf" -o d:/delete -s BURST -overwrite split')
setwd(current.wd)

如果你这样做,经常写一个函数:

shell.in.dir <- function(dir, ...) {
    current.wd <- getwd()
    on.exit(setwd(current.wd))
    setwd(dir)
    shell(...)
}

shell.in.dir("C:/Program Files/pdfsam/bin",
    'run-console.bat -f "d:/delete/A_9.pdf" -o d:/delete -s BURST -overwrite split')

答案 1 :(得分:0)

这不是您问题的答案,但您可以尝试system("youBatFile.bat")作为替代方案。