【问题标题】:setting command line quoted params设置命令行引用的参数
【发布时间】:2012-02-24 23:09:29
【问题描述】:

我需要从我的应用程序中启动命令提示符并为其设置参数。

System.Diagnostics.Process.Start("CMD.exe", "\"C:\Program Files\My Program\program.exe\" \"C:\Program Files\My Program\Program2.exe\"");

上面的那行对我有好处,但他的问题是引号。要在 cmd 中使用引号,我需要对它们进行转义,但是当我转义它们时,我的命令中会出现转义符号 \,所以它不起作用。
任何人都有一个想法,如何解决这个问题?

【问题讨论】:

    标签: c# command-line command-line-arguments command-prompt


    【解决方案1】:
    const string SystemDirectory = @"C:\Windows\System32";
    

    带引号:

    const string SystemDirectory = @"""C:\Windows\System32""";
    

    【讨论】:

    • 这到底有什么帮助?两个 cmd 参数在路径中都有空格,所以如果我使用 @"path" 我得到的参数没有 qoutes 并且不起作用,那么它们必须被引用。
    • @JNM,尝试使用这个(单行):const string CommandLine = @"""C:\Windows\System32\program.exe"" ""C:\input.txt""";
    • 我试过了,但是当我使用"" 时,我在命令行中得到\" 而不是"
    • This is how it works for me.有什么问题吗?
    • 这是我的代码:string command = @"""C:\Program Files (x86)\DBF Viewer 2000\dbview.exe"" ""C:\temp\serviceFiles\test.dbf"" /EXPORT:C:\temp\serviceFiles\test.csv /SEP "; Process.Start("CMD.exe", command);,给命令行的命令是\"C:\\Program Files (x86)\\DBF Viewer 2000\\dbview.exe\" \"C:\\temp\\serviceFiles\\test.dbf\" /EXPORT:C:\\temp\\serviceFiles\\test.csv /SEP ,这是错误的。而不是\",它应该只有"
    【解决方案2】:

    您的代码应如下所示:

    Process.Start("CMD.exe",
                  "\"C:\\Program Files\\My Program\\program.exe\" " +
                  "\"C:\\Program Files\\My Program\\Program2.exe\"");
    

    注意路径中的双反斜杠。

    另一种方法是使用逐字字符串(注意字符串前面的 @ 符号)。在这种情况下,您需要将引号转义为两个引号:

    Process.Start("CMD.exe",
                  @"""C:\Program Files\My Program\program.exe"" " +
                  @"""C:\Program Files\My Program\Program2.exe""");
    

    【讨论】:

    • 你不能像这样在字符串中间跳行。它只允许用于逐字字符串,但它会在字符串中插入一个新行,这不是这里所期望的。也许 string.Format() 在这里更合适?
    • 还是不行。而不是"" 我在命令行中得到\" ant 不起作用。
    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2021-12-02
    • 1970-01-01
    • 2016-02-02
    • 2015-07-08
    相关资源
    最近更新 更多