【问题标题】:C# Executing CMD command with quotation mark in stringC#在字符串中执行带引号的CMD命令
【发布时间】: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,然后后面的参数包含要执行的命令。

标签: c# quotes


【解决方案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"
        • 双引号必须在常规字符串中由反斜杠或逐字字符串中的另一个双引号分隔。
        • 编辑了我的帖子,我的错。
        猜你喜欢
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-17
        相关资源
        最近更新 更多