如何运行简单的 Windows命令?
此命令:
exec.Command("del", "c:\\aaa.txt")
..输出此消息:
del:%path%
中找不到可执行文件
我做错了什么?
答案 0 :(得分:41)
我遇到了和你一样的错误。
但是dystroy是正确的:你不能运行del
或cmd
中内置的任何其他命令,因为没有del.exe
文件(或任何其他del-executable)。
我得到了它:
package main
import(
"fmt"
"os/exec"
)
func main(){
c := exec.Command("cmd", "/C", "del", "D:\\a.txt")
if err := c.Run(); err != nil {
fmt.Println("Error: ", err)
}
}
答案 1 :(得分:6)
您需要Windows cmd才能执行dir
命令。
试试这个:
cmd := exec.Command("cmd", "/C dir").Output()
(抱歉,目前没有Windows计算机可以检查)
答案 2 :(得分:1)
也找到了另一种解决方案。创建包含以下内容的批处理文件:del c:\ aaa.txt
然后这样称呼:
exec.Command("c:\\del.bat").Run()
答案 3 :(得分:1)
如果您需要cmd的输出:
if c, err := exec.Command("cmd","/c","del","a.txt").CombinedOutput(); err != nil {
log.Fatal(err)
} else {
fmt.Printf("%s\n", c)
}
答案 4 :(得分:0)
好吧,根据documentation,让我们看一下在Windows中,进程将命令作为单行字符串接收并自行进行一些解析。 Exec的Command函数通过使用CommandLineToArgvW将所有参数组合在一起来构建命令字符串,尽管这是最常见的引用算法,但并不是对每个应用程序都有效。诸如msiexec.exe和cmd.exe之类的应用程序使用不兼容的取消引用算法,因此需要额外的努力。 这是使用powershell的另一个示例
package main
import (
"os/exec"
"fmt"
"log"
)
func main() {
out, err := exec.Command("powershell","remove-item","aaa.txt").Output()
if err != nil {
log.Fatal(err)
} else {
fmt.Printf("%s",out)
}
答案 5 :(得分:0)
您可以尝试使用github.com/go-cmd/cmd模块。
因为golang默认无法使用syscall。
示例:
import (
"fmt"
"time"
"github.com/go-cmd/cmd"
)
func main() {
// Start a long-running process, capture stdout and stderr
findCmd := cmd.NewCmd("find", "/", "--name", "needle")
statusChan := findCmd.Start() // non-blocking
ticker := time.NewTicker(2 * time.Second)
// Print last line of stdout every 2s
go func() {
for range ticker.C {
status := findCmd.Status()
n := len(status.Stdout)
fmt.Println(status.Stdout[n-1])
}
}()
// Stop command after 1 hour
go func() {
<-time.After(1 * time.Hour)
findCmd.Stop()
}()
// Check if command is done
select {
case finalStatus := <-statusChan:
// done
default:
// no, still running
}
// Block waiting for command to exit, be stopped, or be killed
finalStatus := <-statusChan
}