Les variables d’environnement contenant un chemin exécutable avec des espaces doivent-elles également contenir les guillemets nécessaires?

Lors de la définition d’une variable d’environnement (sous Windows pour moi, il existe peut-être une directive plus générale)

set MY_TOOL=C:\DevTools\bin\mytool.exe 

si l’outil est situé sur un chemin avec des espaces

 set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe 

la variable d’environnement devrait-elle déjà contenir les espaces nécessaires?

C’est-à-dire, devrait-il lire:

 set MY_TOOL="C:\Program Files (x86)\Foobar\bin\mytool.exe" 

au lieu de la version ci-dessus sans espaces?

Note: Compte tenu de la réponse de Joeys , je devrais vraiment limiter cette question aux exemples que j’ai donnés. En d’autres termes, les variables d’environnement qui contiennent un seul outil (exécutable / batch) à appeler par un utilisateur ou par un autre script de traitement par lots.

Peut-être les espaces devraient-ils s’échapper différemment?

Je dirais, faites-le sans les guillemets et utilisez-les partout où vous utilisez la variable:

 set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe "%MY_TOOL%" -someoption someargument somefile 

Surtout si vous laissez l’utilisateur définir la valeur quelque part, je pense que c’est l’option la plus sûre, car ils ont généralement tendance à ne pas l’entourer de citations plutôt que de le faire.

S’il y a beaucoup d’endroits où vous utilisez la variable, vous pouvez bien sûr redéfinir:

 set MY_TOOL="%MY_TOOL%" 

ce qui rend les choses plus résistantes pour vous. En option, vous pouvez détecter s’il y a des citations ou non et les append si elles ne sont pas présentes pour être totalement sûr.

Lorsque votre variable ne représente qu’un chemin vers un répertoire et que vous souhaitez y append des noms de fichiers, alors la chose “no quotes” est encore plus importante, sinon vous construirez des chemins comme

 "C:\Program Files (x86)\Foobar\bin"\mytool.exe 

ou même:

 ""C:\Program Files (x86)\Foobar\bin"\my tool with spaces.exe" 

ce que je doute va parsingr correctement.

Le shell de commande peut répondre à votre question: tapez C:\Pro et appuyez sur la touche de tabulation.

La saisie semi-automatique laissera tous les espaces tels quels et appenda des guillemets autour du nom du fichier. Donc, c’est ce qui est “officiellement” attendu.

(cela suppose que l’autocomplétion est activée, je ne sais pas si la valeur par défaut est activée ou désactivée, mais la plupart des gens l’utilisent de toute façon, je suppose)