我正在尝试为命令提示符调用内置命令,我遇到了我不明白的错误。
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
我做错了什么?
答案 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`)