使用 exec 包执行 Windows 命令时,由于 Windows 解释的方式,参数字符串中的某些字符需要特殊处理双引号。本文研究了发生这种情况的原因,并提供了解决此问题的解决方案。
默认情况下,Windows 将参数字符串中的双引号解释为新参数的开头。当您想要传递包含空格的参数时,这会成为问题,因为 Windows 会将参数拆分为多个部分。例如,执行以下命令将失败:
exec.Command("find", `"SomeText"`).Output()
这是因为 Windows 会将双引号参数解释为两个单独的参数:find 和 SomeText”。
解决方案:
要执行带有双引号参数的 Windows 命令,需要使用 syscall.SysProcAttr 中的 CmdLine 字段,如下所示:
<code class="go">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)</code>
通过设置 CmdLine ,您可以指定 Windows 将执行的确切命令行,绕过默认参数解析,这确保双引号参数被视为单个参数。
以上是如何使用 Go 的 `exec` 包将双引号参数传递给 Windows 命令?的详细内容。更多信息请关注PHP中文网其他相关文章!