C#在路径

时间:2016-12-22 07:06:54

标签: c# process path arguments spaces

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

我需要从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);

不起作用。

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f D:\\as df\\solver\\2035.swag -p 5555";

不起作用。

startInfo.Arguments = "/K \"D:\\as df\\solver\\Swag.Console.exe\" -f \"D:\\as df\\solver\\2035.swag\" -p 5555";

不起作用。

startInfo.FileName = "\"D:\\as df\\solver\\Swag.Console.exe\"";
startInfo.Arguments = " -f \"D:\\as df\\solver\\2035.swag\" -p 5555";

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

enter image description here

1 个答案:

答案 0 :(得分:3)

/ K参数将执行其后的命令。它可以是与&链接的大量命令。但是,这就是你在尝试中遗漏的东西,在这种情况下,它们需要完全用双引号括起来。见the SS64 cmd reference

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

cmd /K " here what ever you want to execute"

由于前倾和反斜,您很快就会失去踪迹。所以我拿出包装了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);

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

-f
D:\as df\solver\2035.swag
-p
5555