exec用双引号参数

时间:2015-03-10 01:29:17

标签: windows go

我想使用find包执行exec Windows命令,但是Windows正在进行一些奇怪的转义。

我有类似的东西: out, err := exec.Command("find", `"SomeText"`).Output()

但是这会引发错误,因为Windows正在将此转换为 find /SomeText"

有谁知道为什么?如何使用exec包在Windows上执行find

谢谢!

2 个答案:

答案 0 :(得分:4)

好的,它比你想象的要复杂一点,但 是一个解决方案:

package main

import (
    "fmt"
    "os/exec"
    "syscall"
)

func main() {
    cmd := exec.Command(`find`)
    cmd.SysProcAttr = &syscall.SysProcAttr{}
    cmd.SysProcAttr.CmdLine = `find "SomeText" test.txt`
    out, err := cmd.Output()
    fmt.Printf("%s\n", out)
    fmt.Printf("%v\n", err)
}

不幸的是although support for this was added in 2011,它似乎还没有进入the documentation。 (虽然也许我只是不知道在哪里看。)

答案 1 :(得分:0)

仅供参考,正在运行:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("find", `"SomeText"`)
    fmt.Printf("Path: %q, args[1]: %q\n", cmd.Path, cmd.Args[1])
}

playground

在unix上给出:

Path: "/usr/bin/find", args[1]: "\"SomeText\""

交叉编译到Windows并在Win7上运行给出:

Path: "C:\\Windows\\system32\\find.exe", args[1]: "\"SomeText\""

两个看起来都对我不对。

out, err := cmd.Output()添加到Windows交叉编译为fmt.Printf("%#v\%v\n", err, err)提供以下内容:

&exec.ExitError{ProcessState:(*os.ProcessState)(0xc0820046a0)}
exit status 1

但我想这只是因为找不到任何东西。