Passer des arguments de ligne de commande à un script batch Windows

10

J'ai besoin de créer un script batch Windows où je dois passer quelques arguments en ligne de commande. Ces arguments peuvent apparaître dans n'importe quel ordre, mais le script doit les récupérer correctement en fonction du nom de l'argument. Par exemple:

<scriptname> -age <agevalue> -gender <gender>
<scriptname> -gender <gender> -age <agevalue>

Le script peut être appelé de l'une des deux manières ci-dessus, mais l'âge et le sexe doivent être correctement récupérés et attribués aux variables. Les arguments peuvent être identifiés par le commutateur qui les précède - c'est-à-dire, -age, -gender, etc.

Quelqu'un peut-il me donner un exemple d'identification de cela en interne?

Dhiwakar Ravikumar
la source

Réponses:

10

batch, malheureusement, n'a pas de getopsfonction intégrée comme . Cependant, vous pouvez implémenter votre propre variante du pauvre:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS
Mureinik
la source
cela peut être fastidieux car le nombre d'arguments dépasse mais cela correspond au projet de loi. Merci
Dhiwakar Ravikumar
1
Après robvanderwoude.com/if.php, il serait préférable d'écrire if /I "%~1" == "--age" ... (notez le tilde). Cela fonctionne également pour les paramètres vides ou les paramètres mis entre guillemets.
Axel Kemper
Vous voudrez peut-être ajouter les guillemets doubles. Sinon, l'instruction ne fonctionne pas avec le paramètre vide% 1.
Axel Kemper du
Si vos différents arguments possibles ont un format ou un type défini, tels que l'âge (étant numérique) et le sexe (étant "M" ou "F"), vous ne devriez pas avoir à définir les arguments, mais utilisez plutôt la reconnaissance de comparaison pour les affecter à les variables appropriées dans le script. J'ai fait cela pour un premier script batch que j'ai écrit pendant une période de transition entre 9x et XP lors de mon premier travail informatique. Le script peut soit accepter des arguments pour le type de système d'exploitation, le lecteur à partir duquel le script s'exécutait et quelques autres choses, soit il peut détecter automatiquement les paramètres appropriés. Un peu exagéré, mais un exercice amusant.
music2myear
8

Pouvez-vous le faire avec Powershell? ou doit-il être batch? Powershell le rend agréable et facile, il vous suffit d'ajouter quelque chose comme ça en haut de votre script, puis vous pouvez appeler chaque paramètre dans n'importe quel ordre

param (
[string]$Age,
[string]$Gender
)

Vous pouvez le faire avec batch, mais cela nécessitera beaucoup de vérification des paramètres. Voici quelques liens de quelques scripts batch qui le font

http://www.ericphelps.com/batch/samples/arguments.bat.txt

(Dupplicate possible de)

/programming/5215729/is-there-a-way-to-pass-parameters-by-name-and-not-by-order-to-a-batch-bat-f

mrwhale
la source
1
il doit s'agir uniquement de scripts batch :(. Nous avons une exigence stricte que ce soit un script batch. Merci beaucoup cependant :)
Dhiwakar Ravikumar