运行 R 中的 cmd 命令
Run cmd command from within R
我想从 R 中 trigger/run 某个 cmd 命令。我找到了函数 system
、system2
和 shell
,但我有点迷茫准确地使用它们。
因此,如果我直接在 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)
我想从 R 中 trigger/run 某个 cmd 命令。我找到了函数 system
、system2
和 shell
,但我有点迷茫准确地使用它们。
因此,如果我直接在 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)