2 votes

call :ProcessArgs / ? produit un appel à l'aide au lieu d'appeler :ProcessArgs avec "/ ?"

J'ai un script qui traite certaines options de ligne de commande et j'aimerais qu'il gère également / ? et - ? Ce dernier fonctionne bien, mais lorsque j'utilise / ? j'obtiens le call help spew et je n'appelle jamais le sous-programme. J'ai fait quelques recherches ici, mais je n'ai rien trouvé de spécifique à ce problème dans les nombreux résultats.

Voici ce que j'ai pu faire de plus simple :

@setlocal ENABLEEXTENSIONS
@set prompt=$G

call :ProcessArgs %*

@exit /b 0

:ProcessArgs
@echo %*
@exit /b 0

Lorsqu'il est appelé avec - ?, tout va bien, mais / ? donne lieu à :

>call :ProcessArgs /?
Calls one batch program from another.

CALL [drive:][path]filename [batch-parameters]

batch-parameters   Specifies any command-line information required by the
                 batch program.
...

Cela me semble être un bug, mais je doute que je découvre de nouveaux bugs dans cmd.exe sur ma machine Win10. L'utilisation de guillemets autour de %* permet d'éviter le déversement d'aide, mais a également pour conséquence que :ProcessArgs reçoit un seul argument, ce que je ne souhaite absolument pas.

Tout indice ou solution de contournement serait grandement apprécié.

Nous vous remercions.

2voto

jeb Points 26035

Il s'agit d'un bogue, mais il peut être utilisé comme une fonctionnalité ( Fonctions anonymes ).

Dans votre cas, vous pouvez éviter ce comportement en utilisant des pourcentages doubles.

Set "args=%*"
call :ProcessArgs %%args%%"

2voto

Jimadine Points 513

J'ai apporté deux petites modifications à votre exemple de script, et cela fonctionne pour /? sous Windows 7 :

@setlocal ENABLEEXTENSIONS
@set prompt=$G

call :ProcessArgs %%*

@exit /b 0

:ProcessArgs
@echo(%*
@exit /b 0

La remarque de Jeb concernant l'échappement avec des doubles pourcentages semble s'appliquer au modificateur d'argument générique %* . Et une petite modification de @echo est nécessaire pour empêcher echo de cracher son help .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X