由于双引号,Windows 上的 Golang exec.Command 错误

Golang exec.Command error on Windows due to double quote

我有这个评论,它下载了一个简单的文件:

var tarMode = "xf"
cmdEnsure = *exec.Command("cmd", "/C", fmt.Sprintf(`curl -L -o file.zip "https://drive.google.com/uc?export=download&id=theIDofthefile" && tar -%s file.zip`, tarMode))
err := cmdEnsure.Run()

go中的这段代码会出错,因为: curl: (1) Protocol ""https" not supported or disabled in libcurl.

现在我明白这是由于我的双引号引起的。但是,如果我删除 if,我会得到 Id is not recognized as an internal or external command, operable program or batch file,这是有道理的,因为 & 简单意味着在 cmd.

中执行另一个命令

那么我执行此类下载命令和提取的选项是什么。 命令本身 运行 在 cmd 上正常 cmd

我发现最好不要在一次执行中尝试组合多个命令。下面的工作正常,您不必担心转义和可移植性,您还可以获得更好的错误处理。

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    if b, err := exec.Command("curl", "-L", "-o", "file.zip", "https://drive.google.com/uc?export=download&id=theIDofthefile").CombinedOutput(); err != nil {
        fmt.Printf("%+v, %v", string(b), err)
        return
    }

    if b, err := exec.Command("tar", "-x", "-f", "file.zip").CombinedOutput(); err != nil {
        fmt.Printf("%+v, %v", string(b), err)
    }
}