英文:
Executable files not in path - GO
问题
我正在尝试调用命令提示符的内置命令,但是我遇到了我不理解的错误。
func main() {
cmd := exec.Command("del", "C:\trial\now.txt")
// 如果需要重新启动
cmd.Stdout = os.Stdout
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
}
我得到了以下错误:
exec: "del": 在 %PATH% 中找不到可执行文件
exit status 1
我做错了什么?
英文:
I'm trying to call a built in command for the command prompt and I'm getting errors I don't understand.
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)
}
}
And I'm getting the following error:
exec: "del": executable file not found in %PATH%
exit status 1
What am I doing wrong?
答案1
得分: 8
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 来执行。
英文:
del
is not an executable, it's a built-in command. exec.Command
allows you to fork out to another executable. To use shell commands, you would have to call the shell executable, and pass in the built-in command (and parameters) you want executed:
cmd := exec.Command("cmd.exe", "/C", "del C:\\trial\\now.txt")
Note that you also have to escape backslashes in strings as above, or use backtick-quoted strings:
cmd := exec.Command("cmd.exe", "/C", `del C:\trial\now.txt`)
However, if you just want to delete a file, you're probably better off using os.Remove
to directly delete a file rather than forking out to the shell to do so.
答案2
得分: 2
除了可执行文件的问题之外,你的路径字符串并不是你想象中的那样。
cmd := exec.Command("del", "C:\trial\now.txt")
\t
将被解释为制表符,\n
将被解释为换行符。
为了避免这种情况,使用``
,它没有特殊字符,也没有转义,甚至没有\
。这对于Windows用户来说是一个很大的解脱!
cmd := exec.Command("del", `C:\trial\now.txt`)
请参阅Go语言规范中的字符串字面值了解更多信息。
英文:
In addition to the problem with the executable, your path string is not what you think it is.
cmd := exec.Command("del", "C:\trial\now.txt")
The \t
will be interpreted as a tab, and the \n
as a newline.
To avoid this, use ``
which has no special characters and no escape, not even \
. A great relief for Windows users!
cmd := exec.Command("del", `C:\trial\now.txt`)
See String Literals in the Go Language Spec for more.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论