参数是前台传过来的,路径自带引号,考虑到空格问题,不能去
我知道可以不经过cmd调用,但出于个人理由此处不使用
// 这是模拟的参数
cmdLine = `"d:/.../i_view64.exe" "E:/465f55d02d.jpg"`
cmd := exec.Command("cmd.exe")
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c " + cmdLine}
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
log.Println(fmt.Sprint(err) + ": " + stderr.String())
} else {
log.Println(out.String())
}
输出结果为:2024/03/19 17:38:41 exit status 1: �ļ�����Ŀ¼�������������ȷ��
乱码我已经放弃了,谷歌了很久没有能解决的,大家有好办法欢迎回答。
改为
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c echo 123 && " + cmdLine}
很神奇,不报错了,但乱码还是不变的——虽然不知道什么内容
还有一个尝试:
cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c chcp 65001 && " + cmdLine}
修改cmd的编码为utf8,没用!
另外
cmd := exec.Command("cmd.exe", "/c", fmt.Sprintf("chcp 65001 && %s", cmdLine))
这个也试了,直接报错,图片都没打开。
各位有何高见?
谢谢