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

pon*_*cho 9 c# matlab cmd process.start command-line-arguments

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

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

app.exe "optional1" optional1value "optional2" optional2value
Run Code Online (Sandbox Code Playgroud)

其中optional1value是整数或字符串等.

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

app.exe optional1 optional1value optional2 optional2value
Run Code Online (Sandbox Code Playgroud)

或类似的东西,matlab的解析器显然会被混淆.

我试过了:

@"""optional1"" optional1value ""optional2" optional2value"""
Run Code Online (Sandbox Code Playgroud)

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

"\"optional1\" optional1value \"optional2\" optional2value\""
Run Code Online (Sandbox Code Playgroud)

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

我发现这篇文章可能是.NET 3.5的cmd解析器中的一个错误,但似乎找不到可行的解决方案.

有没有人有任何想法?

感谢您的时间,

雨披

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

再次感谢.

TaR*_*RDy 12

报价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);
Run Code Online (Sandbox Code Playgroud)

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

"optional1"
optional1value
"optional2"
optional2value
Run Code Online (Sandbox Code Playgroud)