带有双引号参数的 exec

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

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

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

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


牛魔王的故事
浏览 234回答 2
2回答

宝慕林4294392

OK,这是一个比较复杂一点比你预期,但有是一个解决方案:package mainimport (    "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 年添加了对此的支持,但似乎尚未将其纳入文档。(虽然也许我只是不知道在哪里看。)

慕尼黑5688855

仅供参考,运行:package mainimport (    "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但我想那只是因为 find 找不到任何东西。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go