运行 R 中的 cmd 命令

Run cmd command from within R

我想从 R 中 trigger/run 某个 cmd 命令。我找到了函数 systemsystem2shell,但我有点迷茫准确地使用它们。

因此,如果我直接在 Windows 中执行此操作,我会打开 cmd,然后 运行 以下命令:

"C:\Program Files\LatentGOLD6.0\lg60" "C:\Users\USER\myfile.lgs" /b /o "C:\Users\USER\myfile.html" /h

但是,我对在 R 中如何以及在何处指定这样的命令感到困惑,因此它 运行 就是这样。上面的所有 mentioend 函数都需要一个字符串,但由于我需要用引号传递路径,所以我实际上不确定如何将所有这些粘合在一起。

有什么想法吗?

所以这是我当前的代码:

program_path <- "C:\Program Files\LatentGOLD6.0\lg60"
lgs_path     <- "C:\Users\USER\myfile.lgs"
out_path     <- "C:\Users\USER\myfile.html"

batchline <- paste0(program_path, " ", lgs_path, " /b /o ", out_path, " /h")

system(batchline)
system2(batchline)

备选方案也行不通:batchline <- paste0("'", program_path, "'", " ", "'", lgs_path, "'", " /b /o ", "'", out_path, "'", " /h")

编辑:更新了我最初使用正斜杠的错误。

好的,在这里找到了解决方案:,即将文件路径包装到 shQuote 中。

program_path <- normalizePath("C:/Program Files/LatentGOLD6.0/lg60")
lgs_path     <- normalizePath("C:/Users/USER/myfile.lgs")
out_path     <- normalizePath("C:/Users/USER/myfile.html")

batchline <- paste0(shQuote(program_path),
                    " ",
                    shQuote(lgs_path),
                    " /b /o ",
                    shQuote(out_path),
                    " /h")

system(batchline)

如果文字字符串中有反斜杠,请使用 r"{...}",就像我们在此处所做的那样,或者将每个反斜杠加倍(请参阅 ?Quotes),或者在某些情况下使用正斜杠代替反斜杠将起作用。然后用sprintf生成batchline.

program_path <- r"{C:\Program Files\LatentGOLD6.0\lg60}"
lgs_path     <- r"{C:\Users\USER\myfile.lgs}"
out_path     <- r"{C:\Users\USER\myfile.html}"

batchline <- sprintf("%s %s /b /o %s /h", program_path, lgs_path, out_path)

或者如果您想用引号将每个路径括起来,请将最后一行替换为:

batchline <- sprintf('"%s" "%s" /b /o "%s" /h', program_path, lgs_path, out_path)