我正在尝试使用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”等。
再次感谢。
答案 0 :(得分:10)
ProcessStartInfo.Arguments
中的引号必须以三个引号("""
)进行转义。这是因为单引号用于将包含空格的字符串作为单个参数传递。
ProcessStartInfo psi = new ProcessStartInfo("cmd_app.exe", "\"\"\"optional1\"\"\" optional1value \"\"\"optional2\"\"\" optional2value");
Process.Start(psi);
所有cmd_app.exe都会宣布它的args和args是什么,显示的是这个输入:
"optional1"
optional1value
"optional2"
optional2value