猿问

Windows命令行在Golang中参数中附加引号

我想在 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))


开满天机
浏览 383回答 2
2回答

慕容森

fmt.Printf("%q", "somestring") => "somestring"
随时随地看视频慕课网APP

相关分类

Go
我要回答