gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:07 25 4
gpt4 key购买 nike

我正在用 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. 

如果我将代码更改为这个(移动单词开始):

    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. 

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

最佳答案

您的问题可能是传递给 exec.Command 的每个单独的字符串都作为单个参数传递(不解析)给 cmd.exe,这可能也不拆分给定的字符串,因此您必须自己做。

参见 this example争论也被分开了。您应该能够将 "排除在外,因为无论如何您都手动将其拆分,或者为其编写程序或使用进行拆分的解释器运行它。

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...)
}

关于windows - 如何阻止 Golang 在执行 Windows 命令时用反斜杠替换双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57229382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com