我正在尝试使用 Process.Start(ProcessStartInfo) 从 C# 运行命令行应用程序;
问题是,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 行参数中双引号的问题所建议的那样,但它似乎对我不起作用,也没有:
"\"optional1\" optional1value \"optional2\" optional2value\""
我写了一个小的 c# 命令行 .exe 来打印它得到的参数。如果我将命令行参数放在 VS Project->Debug 区域并运行它,那么它会用双引号打印它们,但是由于所有转义等,当我在代码中执行此操作时,.exe 打印参数时没有任何双引号。
我找到了 this article关于它可能是 .NET 3.5 的 cmd 解析器中的错误,但似乎找不到可行的解决方案。
有没有人有什么想法?
谢谢你的时间,
雨披
附言有没有办法查看 cmd.exe 在使用 Process.Start() 发送参数时得到什么?我让我的进程打开了一个 cmd 窗口,但很高兴看到 cmd.exe 得到如下行:“app.exe optional1 optional1value”等。
再次感谢。
最佳答案
ProcessStartInfo.Arguments
中的引号必须转义为三个引号 ("""
)。这是因为单引号用于传递包含空格的字符串作为单个参数。
参见文档 here .
var psi = new ProcessStartInfo(
"cmd_app.exe",
"\"\"\"optional1\"\"\" optional1value \"\"\"optional2\"\"\" optional2value");
Process.Start(psi);
所有 cmd_app.exe 所做的就是宣布它的 args 数量和 args 是什么,它显示这个输入:
"optional1"
optional1value
"optional2"
optional2value
关于C# Process Start 需要带双引号的参数 - 它们消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339701/