双重引用的论点

我想执行使用execfind Windows命令,但Windows正在做一些奇怪的转义。

我有这样的: out, err := exec.Command("find", `"SomeText"`).Output()

但是这是抛出错误,因为Windows正在转换这find /SomeText"

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

谢谢!

好吧,这比您预期的要复杂一点,但有一个解决方案:

 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) } 

不幸的是, 虽然在2011年增加了对此的支持 ,但似乎尚未将其纳入文档 。 (虽然也许我只是不知道在哪里看。)

供参考,运行:

 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]) } 

操场

在Unix上给出:

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

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

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

两者对我来说都是正确的。

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

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

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