从R中以交互方式运行多个Windows系统命令

从R中以交互方式运行多个Windows系统命令,r,windows,session,command-line,R,Windows,Session,Command Line,我正在尝试为Windows 10构建一个R包,该包允许我使用PuTTY的安全文件传输协议(SFTP)客户端,从R控制台内部将文件来回传输到SFTP服务器(是的,我知道还有其他软件包可以进行SFTP传输,但我真的想开发这个软件包,专门用于PSFTP)。我想如果我能简单地克服一个我不知道如何在R中实现的障碍,我就可以实现这一点。有没有一种方法可以调用windows系统命令并将其作为某种会话启动,这样我就可以从R中以交互方式继续使用它?我基本上只想从R控制台获取命令并将它们传递到相同的windows命

我正在尝试为Windows 10构建一个R包,该包允许我使用PuTTY的安全文件传输协议(SFTP)客户端,从R控制台内部将文件来回传输到SFTP服务器(是的,我知道还有其他软件包可以进行SFTP传输,但我真的想开发这个软件包,专门用于PSFTP)。我想如果我能简单地克服一个我不知道如何在R中实现的障碍,我就可以实现这一点。有没有一种方法可以调用windows系统命令并将其作为某种会话启动,这样我就可以从R中以交互方式继续使用它?我基本上只想从R控制台获取命令并将它们传递到相同的windows命令行窗口,在前面的命令之后执行一个命令

一个简单的玩具示例将帮助我解释我正在尝试做的事情。假设我必须在R中逐行执行多个Windows系统命令,例如使用
cd..
将目录更改回一级,然后使用
dir
列出内容。我可以尝试以下方法:

system("cmd.exe", input="cd ..")
system("cmd.exe", input="dir")
显然,这不会按我希望的方式工作,因为没有“内存”在windows系统上执行的第一行代码中,当我执行第二行时。我希望在R中有某种方法来创建类似于上面的代码,这样就相当于从单个cmd窗口运行命令提示符并逐个键入以下命令:

cd ..
dir
最后,我希望能够创建一个类似于
rvest
软件包工作方式的Windows会话。在
rvest
中,用户可以创建一个会话,然后依次向会话发送命令,随后的每个命令都会在会话中最后一个命令停止的位置执行:

library(rvest)
session <- html_session("http://hadley.nz")
jump_to(session, "hadley-wickham.jpg")  #this continues with the session via first argument
库(rvest)

session尝试这样的子流程包

library(subprocess)

handle <- spawn_process("C:\\Windows\\System32\\cmd.exe")
Sys.sleep(1)

process_read(handle, PIPE_STDOUT, timeout = 1000)
process_read(handle, PIPE_STDERR)

process_write(handle, "cd ..\n")
process_write(handle, "dir\n")

process_read(handle, PIPE_STDOUT, timeout = 1000)
process_read(handle, PIPE_STDERR)

process_write(handle, 'exit\n')
库(子流程)

处理得非常好。非常感谢。我将保留此选项,以查看是否有人有其他答案,但看起来这可能会起作用。非常感谢!我还忘了提到我会接受此选项作为答案,我在一两天内没有收到任何更好的答案。