不为别的,只为做一个连自己都羡慕的人

go语言 cmd执行命令,遇到空格或者双引号无法执行成功的解决方案

大部分go执行cmd命令都是,我也是这样写的

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmdExec := `cmd /c "D:\test test\AnyDesk.exe"`
    cmd := exec.Command("cmd", "/C", cmdExec)
    out, err := cmd.Output()
    cmd.Run()
    if err != nil {
        fmt.Println(err)
        return
    }
    cmd.Wait()
    fmt.Println(string(out))
}

但是在使用过程中,偶然间发现上面所有的带引号和空格的路径,就出现了问题,提示路径找不到。后面经过一番的查找与测试,找到了使用如下方法去解决所面临的问题。

package main

import (
    "fmt"
    "os/exec"
    "syscall"
)

func main() {
    cmd := exec.Command("cmd.exe")
    cmdExec := `cmd /c "D:\test test\AnyDesk.exe"`
    fmt.Println(fmt.Sprintf(`/c %s`, cmdExec))
    //核心点,直接修改执行命令方式
    cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: fmt.Sprintf(`/c %s`, cmdExec), HideWindow: true}
    output, err := cmd.Output()
    fmt.Printf("output:\n%s\n", output)
    if err != nil {
        fmt.Printf("error: %+v\n", err)
    }
}

修改成这样,去测试,发现空格和引号问题已经不存在。

参考地址:go语言 cmd执行命令,遇到空格或者双引号无法执行成功的解决方案 - 知乎 (zhihu.com)

posted @ 2022-11-08 17:59  升级打怪  阅读(823)  评论(0编辑  收藏  举报