我想在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(例如标题显示'1234'不是1234),也会发生错误
stdout, err := exec.Command("cmd", "/c", "exiftool.exe", "-title", "1234", str_abs).Output()
错误代码:运行命令eror:退出状态1.
----- 2014/09/10更新@VonC -------------------------------- -----------------
Hi VonC,
我尝试与您提供的代码做同样的事情,但它对我不起作用。 我对命令行代码页感到好奇,我在477(美国)950(Big5)中尝试过它都不适合我。
我想讨论两件事。
我的代码示例如下:
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))
答案 0 :(得分:1)
我刚刚测试过:
output, err := exec.Command(`c:\prgs\exiftool-9.70\exiftool.exe`,
`-title="test 2 世界"`,
"-E", "test.jpg").CombinedOutput()
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(string(output))
它似乎工作得很好。
请注意,如果出现问题,exec.CombinedOutput()
只能看到“exit status 1
”以外的内容。
第二次调用将调度所有EXIF元数据:
exec.Command(`c:\prgs\exiftool-9.70\exiftool.exe`, "test.jpg").CombinedOutput()
标题是预期的test 2 世界
。
答案 1 :(得分:1)
fmt.Printf(“%q”,“somestring”)=> “somestring”