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) } }
修改成这样,去测试,发现空格和引号问题已经不存在。