如何阻止 Golang 在执行 Windows 命令时用反斜杠替换双引号?

我正在用 Golang 编写一个程序,它将使用 Mozilla 的 Thunderbird 电子邮件客户端发送电子邮件。应执行的 Windows 命令是:


 start "" "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe" -compose "to='CloudCoin@Protonmail.com',subject='Subject1',body='Hello'" -offline

我的 Go 代码如下所示(命令是上面列出的命令):


    var command string

    command = `start "" "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"`

    command += ` -compose "to='` + toAddress + `',`

    command += `subject='Subject1',`

    command += `body='Hello'"`

    command += ` -offline`


    cmd := exec.Command("cmd.exe", "/C", command)

但我收到一个错误:


Windows cannot find '\\'. Make sure you typed the name correctly, and then try again. 

如果我将代码更改为这样(移动单词 start):


    var command string

    command = ` "" "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"`

    command += ` -compose "to='` + toAddress + `',`

    command += `subject='Subject1',`

    command += `body='Hello'"`

    command += ` -offline`


    fmt.Println("Command: " + command)


    cmd := exec.Command("cmd.exe", "/C", "start", command)

然后我得到另一个错误:


Windows cannot find 'Files'. Make sure you typed the name correctly, and then try again. 

似乎不是尝试启动“”,而是尝试启动 \\。如何保留双引号?


互换的青春
浏览 138回答 1
1回答

哔哔one

您的问题可能是传递给的每个单独的字符串都exec.Command作为单个参数传递(不解析它)cmd.exe,这可能也不会拆分给定的字符串,因此您必须自己执行此操作。其中参数也被拆分。您应该能够省略 " ,因为无论如何您都手动将其拆分,或者为它编写一个程序或使用执行拆分的解释器运行它。func do() {    args := []string{        "/C",        "start",        "",        `C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe`,        "-compose",        "to=" + toAddress + ",subject=Subject1,body=Hello",        "-offline",    }    cmd := exec.Command("cmd.exe", args...)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go