2017-06-29 32 views
2

我正在尝试调用命令提示符的内置命令,并且出现了我不明白的错误。不在路径中的可执行文件 - GO

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

指定'del'命令的完整路径。我不确定它是如何在windows下运行的,但是在linux上,如果命令是'del',那么最有可能运行'/ usr/bin/del'。 – Twisted1919

+0

我在窗户上。任何想法是什么? – brandonunited

+0

以及为什么我必须这样做?不应该在路上? – brandonunited

回答

6

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直接删除文件,而不是分叉的外壳这样做。

+0

您的参数字符串包含一个制表符和一个换行符。 – JimB

+0

好的。固定。 – Adrian

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了解更多。

相关问题