exec パッケージを使用して Windows コマンドを実行する場合、Windows の解釈方法により、引数文字列内の特定の文字には特別な処理が必要になります。二重引用符。この記事では、この問題が発生する理由を調査し、この問題を解決する解決策を提供します。
デフォルトでは、Windows は引数文字列内の二重引用符を新しい引数の始まりとして解釈します。 Windows では引数が複数の部分に分割されるため、スペースを含む引数を渡す場合、これが問題になります。たとえば、次のコマンドを実行すると失敗します:
exec.Command("find", `"SomeText"`).Output()
これは、Windows が二重引用符で囲まれた引数を 2 つの別個の引数 (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 中国語 Web サイトの他の関連記事を参照してください。