2017-06-29 29 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瞭解更多。

相關問題