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

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

我正在尝试使用 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/

相关文章:

Matlab不同类的协方差矩阵计算

c# - PostBuildEvent 创建目录

c# - 在 ASP.NET MVC 3 中使用 View 模型

c# - 在属性 setter 中采用多种类型

matlab - Matlab sum : The expression to the left of the equals sign is not a valid target for an assignment

字符编码 C 和瑞典语 åöä

c# - 假设 always-trust 在 GPG cmd 中是 yes/true

c# - LINQ to Entities 无法识别方法 'System.TimeSpan Subtract(System.DateTime)

c# - 使用静态类使 UI 元素可从 .NET 中的所有类访问是一种好习惯吗?

regex - Matlab:正则表达式替换