Comment éviter cmd.exe l'interprétation du shell caractères spéciaux comme < > ^

J'ai un Windows CMD script qui accepte un certain nombre de paramètres et exécute un fichier EXE, en passant tout d'abord, quelques codée en dur arguments et ensuite tous les paramètres de l'utilisateur. La commande de script ressemble à ceci:

launcher.exe paramX paramY %*

L'utilisateur à l'exécution de la commande de script à partir du shell Windows comme suit:

launcher.cmd param1 param2 param3 [...]

Le problème que j'ai, c'est que si les paramètres de la commande de script contenir des caractères spéciaux du shell comme < > et ^, l'utilisateur est obligé d'échapper à ces précédents chacun avec 3 caret ^ shell caractères d'échappement.

Deux Exemples

1) Pour faire passer l'argument ten>one à l'EXE, l'utilisateur doit lancer la commande comme suit:

launcher.cmd ten^^^>one

La raison pour cela est que le shell caractères spéciaux ^ et > sont interprétés par le shell de commande à deux niveaux, d'abord sur la ligne de commande et le deuxième à l'intérieur de la CMD script. Ainsi, la coque s'échapper avec l'accent circonflexe ^ shell caractère d'échappement doit être appliqué deux fois. Le problème, c'est que ce n'est pas évidente pour l'utilisateur et semble laid.

Pour cet exemple, une meilleure solution consiste à entourer l'argument avec des guillemets doubles. Toutefois, ce chiffre se décompose pour des exemples plus complexes qui incluent un littéral des guillemets à l'argument.

2) pour passer À l'argument "^ à l'EXE, l'utilisateur doit lancer la commande comme suit:

launcher.cmd "\"^^^^"

Dans mon cas, je souhaite soutenir des arguments qui contiennent tout séquence de faible caractères ASCII, à l'exclusion des caractères de contrôle, c'est à dire les points de code 0x20 à 0x7E. Je comprends qu'il y aura des exemples où l'utilisateur aura pour échapper certains caractères spéciaux du shell avec un accent circonflexe. Cependant, je ne pas souhaitez attribuer à l'utilisateur d'utiliser 3 carets à chaque fois dans ces cas, tout simplement parce qu'ils se trouvent être d'appeler un script CMD au lieu d'un fichier EXE.

Je peux résoudre ce problème en remplaçant la commande de script avec un EXE qui ne le même. Cependant, est-il possible de modifier la commande de script afin qu'il passe ses paramètres grâce à l'EXE sans interpréter les caractères spéciaux du shell?

OriginalL'auteur Paul Urban | 2010-09-28