大部分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)

原文地址:http://www.cnblogs.com/lxz123/p/16870650.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性