一尘不染

exec用双引号引起来

go

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

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

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

有人知道为什么吗?如何find使用exec程序包在Windows上执行?

谢谢!


阅读 467

收藏
2020-07-02

共1个答案

一尘不染

OK,这是一个比较复杂一点比你预期,但有 一个解决方案:

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年添加了对此功能的支持它似乎尚未纳入文档中。(尽管也许我只是不知道在哪里看。)

2020-07-02