如何在 C# 中执行命令行

Posted

技术标签:

【中文标题】如何在 C# 中执行命令行【英文标题】:How to execute a command line in C# 【发布时间】:2016-06-28 11:09:10 【问题描述】:

我在 C# 中执行命令行时遇到问题:

我试试:

String Mon_CMD=@"C:\Windows\system32>ConsoleTest.exe --asMRZ C:\temp\TEST_CMD\image.jpg C:\temp\TEST_CMD\";

System.Diagnostics.Process.Start("cmd.exe", @"/C ' Mon_CMD'");

但我总是出错。

我怎样才能执行这个确切的命令?

【问题讨论】:

你并没有真正连接字符串,这是错误的 c# 语法,尝试:Process.Start("cmd.exe", $"/C 'Mon_CMD'");Process.Start("cmd.exe", "/C '" + Mon_CMD + "'"); 您无需启动 CMD 以从那里执行命令,而是使用所需的参数直接启动“ConsoleTest.exe”。除了你的字符串格式不正确 【参考方案1】:

提供的 ConsoleTest.exe 位于 C:\Windows\system32 中(这似乎不是一个好主意,但这是另一个主题)

String Mon_CMD = @"C:\Windows\system32\ConsoleTest.exe";
String arguments = @"--asMRZ C:\temp\TEST_CMD\image.jpg C:\temp\TEST_CMD\";

System.Diagnostics.Process.Start(Mon_CMD, arguments);

应该做的工作

根据 cFrozenDeath 和 Nyerguds 的建议,如果您想在另一个字符串中使用 Mon_CMD,您有多种选择,例如:使用 + 运算符、StringBuilder 构建一个新字符串,或者如果您使用的是 C#6 字符串插值:

string arguments = $"/C ' Mon_CMD'";

(你不需要一个逐字字符串)

【讨论】:

您还应该提到 OP 连接字符串的错误尝试,这是代码中的错误部分 @cFrozenDeath 你的意思是在 Mon_CMD 或参数中结合路径和 exe 名称吗? @vc74 他们将文本“Mon_CMD”放在带引号的字符串中,而不是将其作为变量引用。 没有,我的意思是 OP 的尝试 ("/C ' Mon_CMD'") 应该是 "/C '" + Mon_CMD + "'"(@Nyerguds 所说的)

以上是关于如何在 C# 中执行命令行的主要内容,如果未能解决你的问题,请参考以下文章

如何解析 C# 的命令行输出?

C#应用程序如何不弹出cmd命令行窗口执行

Java或C#调用命令行批处理命令如何获得返回值

C#开发命令执行驱动程序 之 读入命令行参数

C#开发命令执行驱动程序 之 控制标志的命令行参数

在 C# 中由命令行启动时不显示 Python Plot