Voici l'analyseur d'arguments. Vous pouvez mélanger n'importe quel argument de type chaîne (gardé intact) ou options échappées (simple ou paires option/valeur). Pour le tester, décommentez les 2 dernières déclarations et exécutez comme :
getargs anystr1 anystr2 /test$1 /test$2=123 /test$3 str anystr3
Le caractère d'échappement est défini comme suit "_SEP_=/"
redéfinir si nécessaire.
@echo off
REM Command line argument parser. Format (both "=" and "space" separators are supported):
REM anystring1 anystring2 /param1 /param2=value2 /param3 value3 [...] anystring3 anystring4
REM Returns enviroment variables as:
REM param1=1
REM param2=value2
REM param3=value3
REM Leading and traling strings are preserved as %1, %2, %3 ... %9 parameters
REM but maximum total number of strings is 9 and max number of leading strings is 8
REM Number of parameters is not limited!
set _CNT_=1
set _SEP_=/
:PARSE
if %_CNT_%==1 set _PARAM1_=%1 & set _PARAM2_=%2
if %_CNT_%==2 set _PARAM1_=%2 & set _PARAM2_=%3
if %_CNT_%==3 set _PARAM1_=%3 & set _PARAM2_=%4
if %_CNT_%==4 set _PARAM1_=%4 & set _PARAM2_=%5
if %_CNT_%==5 set _PARAM1_=%5 & set _PARAM2_=%6
if %_CNT_%==6 set _PARAM1_=%6 & set _PARAM2_=%7
if %_CNT_%==7 set _PARAM1_=%7 & set _PARAM2_=%8
if %_CNT_%==8 set _PARAM1_=%8 & set _PARAM2_=%9
if "%_PARAM2_%"=="" set _PARAM2_=1
if "%_PARAM1_:~0,1%"=="%_SEP_%" (
if "%_PARAM2_:~0,1%"=="%_SEP_%" (
set %_PARAM1_:~1,-1%=1
shift /%_CNT_%
) else (
set %_PARAM1_:~1,-1%=%_PARAM2_%
shift /%_CNT_%
shift /%_CNT_%
)
) else (
set /a _CNT_+=1
)
if /i %_CNT_% LSS 9 goto :PARSE
set _PARAM1_=
set _PARAM2_=
set _CNT_=
rem getargs anystr1 anystr2 /test$1 /test$2=123 /test$3 str anystr3
rem set | find "test$"
rem echo %1 %2 %3 %4 %5 %6 %7 %8 %9
:EXIT
14 votes
Y a-t-il une raison pour laquelle vous devez faire cela dans un fichier BAT et non en VBScript ? Il y a peut-être un moyen de le faire dans un fichier BAT, mais si vous vous en tenez à cette approche, vous "entrez dans un monde de douleur, fiston" :-)
0 votes
Le mieux est encore d'utiliser PowerShell. Il dispose d'une gestion des paramètres très avancée et intégrée.
2 votes
@AlekDavis, vous avez probablement raison, mais je suis extrêmement phobique du VBScript. Si je me retrouvais un jour à devoir utiliser VBScript, je pense que je serais déjà dans un monde de douleur. Je me contenterai d'écrire un fichier batch pour automatiser quelque chose, et si je veux le rendre plus utile aux gens, j'ajouterai des arguments. Souvent, certains de ces arguments sont facultatifs. Depuis que j'ai quitté le monde de la banque, je n'ai jamais pensé, ou quelqu'un m'a suggéré, que je devais utiliser du VBScript pour cela.
0 votes
@chickeninabiscuit : Le lien ne fonctionne plus. La version de la machine Wayback fonctionne. Je ne sais pas si je modifie ton commentaire pour qu'il ait l'air d'avoir été fait par moi ou non, je vais juste le coller ici à la place :
http://web.archive.org/web/20090403050231/http://www.pcguide.com/vb/showthread.php?t=52323
.