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

Posted

技术标签:

【中文标题】c# 打开cmd.exe进程并执行多条命令【英文标题】:c# open cmd.exe process and Execute multiple commands 【发布时间】:2015-06-16 21:45:09 【问题描述】:

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

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\*** Client\";

        Process process = new Process();

        ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path );

        process.StartInfo = processInfo;

        process.Start();

但是我不确定添加第二个参数的方法,所以它在 cmd 运行第一个命令之后运行。一些研究使我找到了这个代码 sn-p。我不确定这是否有效,因为我的目标是从 cmd 启动 cisco *** 客户端,而这似乎无法启动它。代码如下:

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Cisco Systems\*** Client\";

        Process process = new Process();

        ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/c cd " + path + "-t ***client connect user validuser pwd validpassword nocertpwd validconnectionentry ");

        process.StartInfo = processInfo;

        process.Start();

我曾经使用凭据从 cmd 启动 *** 客户端,只是为了确保它们有效并且可以正常工作,但我无法通过 C# 以编程方式将其关闭。

问候。

【问题讨论】:

/c 之后的所有内容都是命令行指令。因此,您可以将其打印出来,然后在命令行中键入相同的内容,看看会发生什么,然后进行试验,直到它起作用为止。在这种情况下,您尝试使用-t 选项运行cd;没有这样的选择。相反,请使用 & 在一行中包含多个命令。 此外,如果UseShellExecute 为假(可能即使它为真,尽管文档另有说明),您可以设置WorkingDirectory 为新进程设置当前目录。这样一来,您根本不需要 cd 命令。 @HarryJohnston 这对我有用。如果您将其写为答案,那么我会将其标记为遇到类似情况的人的答案。 【参考方案1】:

你可以做三件事来实现你想要的。最简单的就是通过ProcessStartInfo设置进程的工作目录。这样您只需执行命令即可启动 *** 客户端。

第二个选项是重定向进程的输入和输出。 (也通过ProcessStartInfo 完成)如果您需要向进程发送更多输入,或者当您想要检索刚刚启动的进程的输出时,您需要这样做。

第三个选项是将这两个命令与& 符号结合起来。使用 & 符号使 cmd.exe 顺序执行这两个命令(有关可用符号的概述,请参阅 here)。使用此选项将产生如下命令:/c cd path & ***client

但是,因为您只想使用第一个选项更改进程的工作目录,所以您的代码更具可读性。因为阅读您的代码的人不需要知道 bash 中的 & 符号即可理解您的代码的作用。使用ProcessStartInfo (MSDN) 的WorkingDirectory (MSDN) 属性更改工作目录。见以下代码:

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

【讨论】:

我使用了您指定的第一个选项并先设置工作目录然后执行命令。这适用于我的情况,但是一旦我尝试了您指定的所有其他选项,我会发表评论。感谢您指出几种方法。 由于第二个选项太过分了,我没有提供更多信息。请参阅以下tutorial,了解有关如何实现这一目标的一些指示。【参考方案2】:

您可以使用& 执行下一个命令或&& 仅在上一个命令成功时执行以下命令。

例子:

dir /b & cls

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

【讨论】:

以上是关于c# 打开cmd.exe进程并执行多条命令的主要内容,如果未能解决你的问题,请参考以下文章

C#程序调用cmd.exe执行其他exe进程(并且含多个参数),并把进程结果返回给字符串

使用/不使用 cmd.exe 执行 Java 子进程命令行

创建在所选目录中打开的命令提示符进程

C#进程线程不能写输出

用Javascript调用cmd并执行命令

如何用shell调用多条cmd命令