Lors de l'exécution de commandes Windows à l'aide du package exec, certains caractères de la chaîne d'argument nécessitent un traitement spécial en raison de la façon dont Windows interprète guillemets doubles. Cet article explique pourquoi cela se produit et propose une solution pour résoudre ce problème.
Par défaut, Windows interprète les guillemets doubles dans une chaîne d'argument comme le début d'un nouvel argument. Cela devient problématique lorsque vous souhaitez transmettre un argument contenant des espaces, car Windows divisera l'argument en plusieurs parties. Par exemple, l'exécution de la commande suivante échouera :
exec.Command("find", `"SomeText"`).Output()
En effet, Windows interprétera l'argument entre guillemets comme deux arguments distincts : find et SomeText".
Solution :
Pour exécuter une commande Windows avec un argument entre guillemets, vous devez utiliser le champ CmdLine dans syscall.SysProcAttr, comme indiqué ci-dessous :
<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>
En définissant CmdLine, vous pouvez spécifier la ligne de commande exacte qui sera exécutée par Windows, en contournant l'analyse des arguments par défaut. Cela garantit que l'argument entre guillemets est bien. traité comme un seul argument.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!