golang exec.Command 执行cmd命令的问题?

我感觉栽在这上面好多次了……

示例命令: commandStr

"d:/可能包含空格/magick.exe" "E:/可能包含空格/0.psd[0]" -strip -resize "2048x2048>" "C:\...\Temp\2118f16acd3ea04b22c30b7369fd5169.avif" && identify -format "%[fx:w] %[fx:h]" "E:/可能包含空格/0.psd[0]"

在cmd中执行:
输出:

1000 485

可以证明上面的命令是正确的。

在 go:

cmd := exec.Command("cmd.exe", "/c", commandStr)
output, err := cmd.CombinedOutput()
if err != nil {
  fmt.Printf("Error: %v\n", err)
  fmt.Printf("Output: %s\n", string(output))
  return
}

报错1: `Output: '\"d:/可能包含空格/magick.exe\"' �����ڲ����ⲿ���Ҳ���ǿ����еij���
���������ļ���`

乱码我无能为力,但看输出,貌似是转义,这莫名其妙,但我先去掉magick.exe的引号

报错2:

Error: exit status 1
Output: magick.exe: unable to open image '"E:/可能包含空格': Invalid argument @ error/blob.c/OpenBlob/3596.
magick.exe: no decode delegate for this image format `' @ error/constitute.c/ReadImage/746.

问题很简单,路径有空格,并且引号被无视了,为啥?

有明白的大佬吗?
谢谢

阅读 1k
1 个回答

 prg := "d:/可能包含空格/magick.exe"
 arg1 := "E:/可能包含空格/0.psd[0]"
 arg2 := "-strip -resize "2048x2048>" 
 arg3 := "C:\...\Temp\2118f16acd3ea04b22c30b7369fd5169.avif"
 cmd := exec.Command(prg, arg1, arg2,arg3)

上面这样不行吗? 没有window环境验证

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏