C#Process Start需要带双引号的参数 - 它们会消失

时间:2013-01-15 14:19:32

标签: c# matlab cmd command-line-arguments process.start

我正在尝试使用Process.Start(ProcessStartInfo)从c#运行cmd行应用程序;

问题是,cmd行应用程序是一个matlab独立的.exe并且有可选的参数,这意味着你可以在cmd行上传递它们:

app.exe "optional1" optional1value "optional2" optional2value

optional1value 是整数或字符串等。

我们遇到的问题是双引号不是作为“optional1”参数的一部分传递的,所以我相信cmd.exe会得到类似的结果:

app.exe optional1 optional1value optional2 optional2value

或类似的东西,matlab的解析器显然会被它迷惑。

我试过了:

@"""optional1"" optional1value ""optional2" optional2value"""

正如其他一些关于cmd行参数中的双引号的SO问题所暗示的那样,但它似乎对我没有用,也没有:

"\"optional1\" optional1value \"optional2\" optional2value\""

我写了一个小的c#命令行.exe来打印出它得到的参数。如果我将命令行参数放在VS Project-> Debug区域并运行它然后用双引号打印它们但由于所有转义等等,当我在代码中执行此操作时,.exe打印参数而不带任何双引号

我发现this article关于它可能是.NET 3.5的cmd解析器中的一个错误,但似乎找不到可行的解决方案。

有没有人有任何想法?

感谢您的时间,

雨披

P.S。有没有办法看到使用Process.Start()发送参数时cmd.exe会得到什么?我让我的进程打开一个cmd窗口但是很高兴看到cmd.exe行如下所示:“app.exe optional1 optional1value”等。

再次感谢。

1 个答案:

答案 0 :(得分:10)

ProcessStartInfo.Arguments中的引号必须以三个引号(""")进行转义。这是因为单引号用于将包含空格的字符串作为单个参数传递。

请参阅此处的文档:https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.arguments(v=vs.110).aspx

ProcessStartInfo psi = new ProcessStartInfo("cmd_app.exe", "\"\"\"optional1\"\"\" optional1value \"\"\"optional2\"\"\" optional2value");
Process.Start(psi);

所有cmd_app.exe都会宣布它的args和args是什么,显示的是这个输入:

"optional1"
optional1value
"optional2"
optional2value