c#打开cmd.exe进程并执行多个命令

我想能够打开cmd并从窗口执行两个命令。 首先,我想导航到一个特定的目录,然后我可以运行第二个命令。 运行一个命令是非常简单的,因为我只需要这么做:

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\VPN Client\"; Process process = new Process(); ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path ); process.StartInfo = processInfo; process.Start(); 

但是我不确定如何添加第二个参数,以便在cmd运行第一个命令后运行。 一些研究将我引向了这个代码片段。 我不确定这是否工作,因为我的目标是从cmd启动cisco vpn客户端,这似乎并没有启动它。 这里是代码:

 string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\VPN Client\"; Process process = new Process(); ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path + "-t vpnclient connect user validuser pwd validpassword nocertpwd validconnectionentry "); process.StartInfo = processInfo; process.Start(); 

我曾经从cmd凭借凭据启动VPN客户端,以确保它们是有效的,它的工作,但我不能通过C#编程拉。

问候。

有三件事你可以做到,以达到你想要的。 最简单的方法是通过ProcessStartInfo设置进程的工作目录。 这样你只需要执行命令来启动VPN客户端。

第二个选项是重定向进程的输入和输出。 (也通过ProcessStartInfo完成)如果您需要向流程发送更多输入,或者想要检索刚刚启动的流程的输出,则可以执行此操作。

第三个选项是将这两个命令与&符号组合在一起。 使用&符号使cmd.exe按顺序执行这两个命令(请参阅这里了解可用符号的概述)。 使用这个选项会产生如下命令: /c cd path & vpnclient

但是因为您只是想使用第一个选项更改进程的工作目录,所以您的代码更具可读性。 因为读取你的代码的人不需要知道bash中的&符号来理解你的代码是干什么的。 使用ProcessStartInfo ( MSDN )的WorkingDirectory ( MSDN )属性更改正在工作的directoy。 看下面的代码:

 var processInfo = new ProcessStartInfo("cmd.exe", @"/c vpnclient connect user validuser pwd validpassword nocertpwd validconnectionentry "); processInfo.UseShellExecute = false; processInfo.WorkingDirectory = path; 

只有在前一个命令成功的情况下,才可以使用&来执行下一个命令或&&来执行下一个命令。

例子:

 dir /b & cls 

 taskkill /f /im explorer.exe && start explorer