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

发布于 2024-12-04 05:51:11 字数 608 浏览 2 评论 0原文

我正在使用 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位)

谢谢, 汤姆

I'm using the console of PDFSam to split and merge some PDF files. I can do this semi-automatically using .bat files, but I would like to do the whole thing in R.

This code in my .bat file works:

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

But this "equivalent" code in my R shell command returns no errors, but doesn't seem to work.

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

Is there an option I'm missing in my shell command? I've tried a few of the options listed in ?shell to no avail.

I'm using windows XP and
R version 2.13.1 (2011-07-08)
Platform: i386-pc-mingw32/i386 (32-bit)

Thanks,
Tom

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枫以 2024-12-11 05:51:11

您可以通过 & 连接多个命令来将它们传递给 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')

You could pass multiple commands to shell by concatenating them by &, so below should work:

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

But as a workaround you could temporary change R working directory:

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)

If you do it frequent write a function:

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')
桜花祭 2024-12-11 05:51:11

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

This isn't exactly an answer to your question, but you might try system("youBatFile.bat") as an alternative.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文