使用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中文網其他相關文章!