我想在 Windows(带有 Go 1.3.1 的 Windows 8.1)中编写一个批处理助手来使用 exiftool.exe。
我在 Go 中运行命令行的原因是我试图访问一些我从其他 Web 端检索的 EXIF 信息。我只想写回图片EXIF。
这是我的代码段。
str_abs, _ := filepath.Abs(target_path)
str_title := fmt.Sprintf("-title=\"%s\"", ext_str)
stdout, err := exec.Command("cmd", "/c", "exiftool.exe", str_title, "-E", str_abs).Output()
但是我发现参数中总是有一个附加引号,因此结果将与:
exiftool.exe -title=""TITLE"" -E TARGET_FILE
知道它是怎么发生的吗?或有关如何处理这样的参数的任何建议。
笔记:
之所以我把参数和字符串分开,又把它组合起来,是因为命令行需要使用unicode字符串,比如Chinese String。
exiftool.exe 仅适用于带有“&#%d;”的命令行 在 Windows 中使用汉字编码,所以我对此做了更多处理。
如果我使用非 unicode 也会发生错误,例如(标题显示“1234”而不是 1234)
stdout, err := exec.Command("cmd", "/c", "exiftool.exe", "-title", "1234", str_abs).Output()
错误代码:运行命令错误:退出状态 1。
-----更新@VonC 2014/09/10----------------------------------- --------------
嗨,VonC,
我试图做与您提供的代码相同的事情,但它对我不起作用。我对命令行代码页很好奇,我在 477(US) 950 (Big5) 中尝试过,两者都不适合我。
有两件事我想讨论。
中文字必须改成&#%d; 否则会错误显示。
例如:世界 -> 世界检查这个错误的编码图片是否有编码显示错误。
即使我尝试过,但它仍然在我的图片标题中显示额外的“。
参考这个额外的报价图片。
我的代码示例如下:
output, err := exec.Command(`d:\exiftool.exe`,
`-title="test 2世界"`,
//If it not trasnfer from 世界 -> 世界 it could not display correctly.
"-E", "test.jpg").CombinedOutput()
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(string(output))
慕容森
相关分类