C# 使用 Process.Start 并在路径中包含参数和空格

Dmi*_*aev 5 c# arguments spaces process path

我见过类似的例子,但找不到与我的问题完全相同的东西。

我需要从 C# 运行这样的命令:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd";
startInfo.Arguments = "/K D:\\as df\\solver\\Swag.Console.exe -f D:\\as df\\solver\\2035.swag -p 5555";
Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)

不起作用。

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f D:\\as df\\solver\\2035.swag -p 5555";
Run Code Online (Sandbox Code Playgroud)

不起作用。

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555";
Run Code Online (Sandbox Code Playgroud)

不起作用。

startInfo.FileName = "\"D:\\as df\\solver\\Swag.Console.exe\"";
startInfo.Arguments = " -f \"D:\\as df\\solver\\2035.swag\" -p 5555";
Run Code Online (Sandbox Code Playgroud)

所以它有效,但我想要 CMD,这可能吗?

在此输入图像描述

ren*_*ene 4

/K 参数将执行其后面的命令。它可能是用 & 链接的大量命令,但是,这就是您在尝试中缺少的内容,在这种情况下,它们需要完全用双引号引起来。请参阅 SS64 cmd 参考

换句话说,该命令应如下所示:

cmd /K " here what ever you want to execute"
Run Code Online (Sandbox Code Playgroud)

由于正斜杠和反斜杠的存在,你很快就会迷失方向。因此,我取出了包裹 String.Format 的外部双引号,这样您的实际命令应该是什么样子就变得更加清晰了。这是我期望应该工作的代码:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd";
startInfo.Arguments = String.Format(
    "/K \"{0}\"", 
    " \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555");
Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)

如果 Swag.Console.Exe 只是将其参数转储到控制台,结果将是:

-f
D:\as df\solver\2035.swag
-p
5555
Run Code Online (Sandbox Code Playgroud)