可执行文件不在路径中 - GO

时间:2017-06-29 19:02:55

标签: go command-line

我正在尝试为命令提示符调用内置命令,我遇到了我不明白的错误。

func main() {
    cmd := exec.Command("del", "C:\trial\now.txt")
// Reboot if needed
    cmd.Stdout = os.Stdout
    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}

我收到以下错误:

exec: "del": executable file not found in %PATH%
exit status 1

我做错了什么?

2 个答案:

答案 0 :(得分:7)

del不是可执行文件,它是内置命令。 exec.Command允许您分叉到另一个可执行文件。要使用shell命令,您必须调用shell可执行文件,并传入您想要执行的内置命令(和参数):

cmd := exec.Command("cmd.exe", "/C", "del C:\\trial\\now.txt")

请注意,您还必须如上所述转义字符串中的反斜杠,或使用反引号引用的字符串:

cmd := exec.Command("cmd.exe", "/C", `del C:\trial\now.txt`)

但是,如果您只想删除文件,最好使用os.Remove直接删除文件而不是分配给shell来执行此操作。

答案 1 :(得分:2)

除了可执行文件的问题之外,你的路径字符串不是你想象的那样。

cmd := exec.Command("del", "C:\trial\now.txt")

\t将被解释为标签,\n将被解释为换行符。

要避免这种情况,请使用没有特殊字符且无法逃避的``,甚至不使用\。对Windows用户来说是一个很大的安慰!

cmd := exec.Command("del", `C:\trial\now.txt`)

有关详情,请参阅String Literals in the Go Language Spec