R 获取通过system/shell.exec运行的Windows命令

R 获取通过system/shell.exec运行的Windows命令,r,windows,R,Windows,我经常使用这个工具打印出文件内容的树形图。我想将其添加到R中的工作流中,但无法通过system或shell.exec运行命令,并且无法找出原因。下面是一个可重复的示例,使用system中的shQuote(带和不带)和shell.exec命令有4种方法和错误消息。当我使用cat时,我可以将该命令粘贴到Windows命令行手册(不使用R),并生成树形图。我有什么地方做得不对,以致无法在R中运行 ## build some mock files and directories with lapply

我经常使用这个工具打印出文件内容的树形图。我想将其添加到R中的工作流中,但无法通过
system
shell.exec
运行命令,并且无法找出原因。下面是一个可重复的示例,使用
system
中的
shQuote
(带和不带)和
shell.exec
命令有4种方法和错误消息。当我使用
cat
时,我可以将该命令粘贴到Windows命令行手册(不使用R),并生成树形图。我有什么地方做得不对,以致无法在R中运行

## build some mock files and directories with lapply
lapply(file.path("TEMP", c("", "X", "Y")), dir.create)
lapply(file.path("TEMP", paste0(c("A", "B"), ".txt")), file.create)

## create path to external file
out <- file.path(getwd(), "TREE.txt")

## create the tree command
cmd <- paste("tree", shQuote(file.path(getwd(), "TEMP")), "/f /a >", shQuote(out))
cat(cmd)  ## view it

system(cmd)  ## attempt 1

cmd <- paste("tree", shQuote(file.path(getwd(), "TEMP")), "/f /a >", shQuote(out))
shell.exec(cmd)  ## attempt 2

cmd2 <- paste("tree", file.path(getwd(), "TEMP"), "/f /a >", out)
system(cmd2)  ## attempt 3
shell.exec(cmd2)  ## attempt 4

cat(cmd, file="clipboard")


## > out <- file.path(getwd(), "TREE.txt")
## > cmd <- paste("tree", shQuote(file.path(getwd(), "TEMP")), "/f /a >", shQuote(out))
## > cat(cmd)
## tree "C:/Users/trinker/Desktop/TEMP" /f /a > "C:/Users/trinker/Desktop/TREE.txt"> 
## > system(cmd)
## Too many parameters - >
## > 
## > cmd <- paste("tree", shQuote(file.path(getwd(), "TEMP")), "/f /a >", shQuote(out))
## > shell.exec(cmd)
## Error in shell.exec(cmd) : 
##   'tree "C:/Users/trinker/Desktop/TEMP" /f /a > "C:/Users/trinker/Desktop/TREE.txt"' not found
## > 
## > 
## > cmd2 <- paste("tree", file.path(getwd(), "TEMP"), "/f /a >", out)
## > system(cmd2)
## Too many parameters - >
## > shell.exec(cmd2)
## Error in shell.exec(cmd2) : 
##   'tree C:/Users/trinker/Desktop/TEMP /f /a > C:/Users/trinker/Desktop/TREE.txt' not found
##使用lappy构建一些模拟文件和目录
lappy(file.path(“TEMP”,c(“,“X”,“Y”)),dir.create)
lappy(file.path(“TEMP”)、paste0(c(“A”、“B”)、“.txt”)、file.create)
##创建外部文件的路径
输出指令目录(指令目录)
##树“C:/Users/trinker/Desktop/TEMP”/f/a>“C:/Users/trinker/Desktop/tree.txt”>
##>系统(cmd)
##参数太多->
## > 
##>cmd shell.exec(cmd)
##shell.exec(cmd)中出错:
##未找到“tree”C:/Users/trinker/Desktop/TEMP”/f/a>“C:/Users/trinker/Desktop/tree.txt”
## > 
## > 
##>cmd2系统(cmd2)
##参数太多->
##>shell.exec(cmd2)
##shell.exec(cmd2)中出错:
##未找到“树C:/Users/trinker/Desktop/TEMP/f/a>C:/Users/trinker/Desktop/tree.txt”

使用
shell
。在Windows上,
system
不使用shell(它只运行系统命令)。您试图使用管道重定向输出,因此遇到了
中指出的问题?系统

命令
必须是可执行文件(扩展名为“.exe”、“.com”)或批处理文件(扩展名为“.cmd”和“.bat”):如果没有提供扩展名,则依次尝试这些扩展名。)这意味着重定向、管道、DOS内部命令。。。无法使用:如果要传递shell命令行,请参阅
shell


也许不是最好的编程方式,但如果它有效的话,是的。我希望有一种直接发送完整路径的方法,但如果不可能的话,切换wd可能是最好的方法。@Thomas good call,这很有效。@user20650能否将
shell
作为答案?