我想从Rust程序运行以下命令:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/"

在cmd中,这有效。

cmd /C ""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/""

在C#中,这有效。
var comm = @"""""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" ""https://stackoverflow.com/""""";
System.Diagnostics.Process.Start("cmd", "/C " + comm);

在Rust中,这不起作用。
let comm = r#"""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/"""#;
let output = Command::new("cmd")
    .args(&["/C", comm])
    .output()
    .expect("failed to execute process");

我收到以下错误。

The network path was not found.

但是,当commecho hello时,它可以工作。

我尝试了另外两种方法:

  • let comm = r#"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe https://stackoverflow.com/"#;
    



    'C:\Program' is not recognized as an internal or external command,
    operable program or batch file.
    

  • let comm = r#""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe https://stackoverflow.com/""#;
    


    '\"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe\"' is not recognized as an internal or external command,
    operable program or batch file.
    
  • 最佳答案

    这是a known issue。不幸的是,用于转义参数的Windows规则是不平凡的,而且很难正确处理。

    这段代码:

    let comm = r#""C:\Program Files\Google\Chrome\Application\chrome.exe" https://stackoverflow.com/"#;
    let mut cmd = Command::new("cmd");
    cmd.arg("/c");
    cmd.arg(comm);
    

    执行此:

    "cmd" "/c" "\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" https://stackoverflow.com/"
    

    不幸的是,内引号已被转义,尽管在这种情况下不应该转义。

    作为一种解决方法,在许多情况下,实际上不需要使用cmd。在这种情况下,改为直接执行该流程更为明智:
    let output = Command::new(r#"C:\Program Files\Google\Chrome\Application\chrome.exe"#)
        .args(&["https://stackoverflow.com/"])
        .output()
        .expect("failed to execute process");
    

    关于windows - 当命令包含空格时,cmd/C在Rust中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44757893/

    10-11 22:57
    查看更多