C#在字符串中执行带引号的CMD命令

Posted

技术标签:

【中文标题】C#在字符串中执行带引号的CMD命令【英文标题】:C# Executing CMD command with quotation mark in string 【发布时间】:2017-04-16 12:17:10 【问题描述】:

我要执行以下cmd命令:

"C:\Program Files\bin\install332.exe" remove tap0901

这是我的 C# 代码:

                ProcessStartInfo Install332= new ProcessStartInfo();
                path Install332.FileName = ("cmd.exe");
                //Our cmd code
                Install332.Arguments = (""C:\Program Files\bin\install332.exe" remove tap0901"");

                Install332.WindowStyle = ProcessWindowStyle.Hidden;
                Install332.CreateNoWindow = true;

                Process.Start(Install332);

但是 cmd 命令不会正确执行,因为 cmd 命令中指定“install332.exe”位置的引号没有出现。感谢您的帮助。

【问题讨论】:

您是否尝试用撇号替换第一个和最后一个引号?像这样: Install332.Arguments = ('"C:\Program Files\bin\install332.exe" remove tap0901');您还可以通过在 ("\"C:\Program Files\bin\install332.exe" remove tap0901\"") 之前添加 \ 来转义内部撇号 您需要分隔引号和反斜杠。虽然为什么不将文件名设为 install332.exe 的路径,然后将参数设为“remove tap0901”呢? 您是否特别需要启动cmd.exe 并指示它依次启动install332.exe?否则,直接启动install332.exe 会简化事情。顺便说一句,您可能希望cmd.exe 的第一个参数是/C/K,然后后面的参数包含要执行的命令。 Spaces in file path passed as command line argument的可能重复 【参考方案1】:

我什至不会打扰“cmd.exe”

Install332.FileName = (@"C:\Program Files\bin\install332.exe");
Install332.Arguments = ("remove tap0901");

这样您就不必担心路径中包含空格的双引号,但您需要像我在这里所做的那样分隔反斜杠或使用逐字字符串。

【讨论】:

【参考方案2】:

请试试这个:

string path = "\"C:\\Program Files\\bin\\install332.exe\" remove tap0901";
Console.WriteLine(path);

结果应该是:

"C:\Program Files\bin\install332.exe" remove tap0901

【讨论】:

【参考方案3】:
Install332.Arguments = (@"""C:\Program Files\bin\install332.exe"" remove tap0901");

【讨论】:

【参考方案4】:

给定的字符串中有五个引号。这意味着其中一个没有匹配项,那就是最后一个额外的"

Install332.Arguments = (""C:\Program Files\bin\install332.exe" remove tap0901");

最好使用@ 将字符串设为verbatim string literal,因为您正在处理路径。

逐字字符串文字以@ 开头,也用双引号括起来。

逐字字符串的优点是不处理转义序列,便于编写。

Install332.Arguments = (@"""C:\Program Files\bin\install332.exe"" remove tap0901");

【讨论】:

我想你会发现,如果你想在逐字字符串文字中使用双引号,它仍然需要加倍,所以你需要 @"""C:\Program Files\bin\install332 .exe""删除tap0901" 双引号必须在常规字符串中由反斜杠或逐字字符串中的另一个双引号分隔。 编辑了我的帖子,我的错。

以上是关于C#在字符串中执行带引号的CMD命令的主要内容,如果未能解决你的问题,请参考以下文章

CMD命令中的参数带有双引号,如何转义双引号?

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

Wix安装程序使用参数执行cmd

CMD命令中的参数带有双引号,如何转义双引号?

[C#] C#代码执行cmd命令

C# 执行CMD命令