web-dev-qa-db-fra.com

Que fait le guillemet simple dans les fichiers batch Windows?

J'ai récemment exécuté une commande dans windows cmd avec des guillemets simples et j'ai constaté qu'elle ne se comportait pas comme prévu.

En essayant de google "Windows batch quote single vs double quote", j'ai trouvé quelques articles où les gens ont demandé à ce que Windows traite les guillemets simples comme les guillemets doubles et comment bash traite les guillemets simples et les guillemets doubles différemment. Cependant, je ne pouvais pas facilement trouver une explication explicite de ce que font les guillemets simples dans les commandes batch de Windows.

Alors, que font les guillemets simples dans les fichiers batch Windows? Exécute-t-il des fonctionnalités de citation?

33
math4tots

Les guillemets simples ne sont pas du tout utilisés par le processeur de commandes cmd.exe, sauf pour inclure la commande à exécuter dans une instruction FOR/F:

for /f %%A in ('someCommand') do ...

Ou pour spécifier une chaîne à traiter par FOR/F si l'option USEBACKQ est utilisée:

for /f "usebackq" %%A in ('some string') do ...

Tous les autres devis gérés par cmd.exe sont effectués avec des guillemets doubles. Cependant, il existe des utilitaires Windows (commandes externes) comme WMIC qui utilisent des guillemets simples pour leurs propres fins de devis. Mais il n'y a pas de norme - chaque utilitaire est libre d'avoir sa propre interprétation des guillemets simples.

Les règles d'échappement et de citation incohérentes utilisées par cmd.exe par rapport à divers utilitaires de ligne de commande rendent souvent difficile la découverte de la syntaxe correcte requise pour une situation donnée.

Voici quelques remarques importantes sur l'utilisation des guillemets doubles " avec cmd.exe.

  • Les guillemets doubles sont une machine à états simple. La première " active la citation, la suivante la désactive.

  • Tous les caractères spéciaux sont traités comme des valeurs littérales lorsqu'ils sont cités, sauf pour le % et <newLine> caractères toujours, et le ! si l'expansion différée est activée, et le ^ caractère si l'expansion différée est activée et ! apparaît également quelque part dans la ligne.

  • Si la citation est désactivée, vous pouvez échapper à un " comme ^" pour l'empêcher d'activer les guillemets. Mais une fois la citation activée, vous ne pouvez pas échapper à la fermeture ". Le tout prochain " désactivera toujours les devis.

37
dbenham