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)