Passando argomenti della riga di comando a uno script batch di Windows


10

Devo creare uno script batch di Windows in cui devo passare alcuni argomenti della riga di comando. Questi argomenti possono apparire in qualsiasi ordine, ma lo script dovrebbe prenderli correttamente in base al nome dell'argomento. Per esempio:

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

Lo script può essere chiamato in uno dei due modi sopra indicati, ma l'età e il genere devono essere correttamente raccolti e assegnati alle variabili. Gli argomenti possono essere identificati dallo switch prima di loro - cioè, -age, -gender, ecc.

Qualcuno può darmi un esempio di identificazione interna?

Risposte:


10

batch, sfortunatamente, non ha una getopsfunzione integrata come fa . Tuttavia, potresti implementare la variante del tuo povero uomo:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS

questo potrebbe essere ingombrante poiché il numero di argomenti supera ma si adatta al conto. Grazie
Dhiwakar Ravikumar,

1
Seguendo robvanderwoude.com/if.php sarebbe meglio scrivere if /I "%~1" == "--age" ... (notare la tilde). Questo funziona anche con parametri vuoti o che sono messi tra virgolette.
Axel Kemper,

Potresti voler aggiungere le doppie virgolette. In caso contrario, l'istruzione non funziona con il parametro vuoto% 1.
Axel Kemper,

Se i tuoi vari argomenti possibili hanno un formato o tipo prefissato, come età (essendo numerico) e genere (essendo "M" o "F") non dovresti definire gli argomenti, ma invece utilizzare il riconoscimento comparativo per assegnarli a le variabili appropriate all'interno dello script. L'ho fatto per uno script batch iniziale che ho scritto durante un periodo di transizione tra 9x e XP nel mio primo lavoro IT. Lo script poteva accettare argomenti per il tipo di sistema operativo, l'unità da cui era in esecuzione lo script e alcune altre cose, oppure poteva rilevare automaticamente le impostazioni appropriate. Un po 'eccessivo, ma un esercizio divertente.
music2myear,

8

Puoi farlo con Powershell? o deve essere batch? Powershell lo rende facile e semplice, devi solo aggiungere qualcosa di simile nella parte superiore dello script e quindi puoi chiamare ogni parametro in qualsiasi ordine

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

Puoi farlo con batch, ma richiederà un sacco di controllo dei parametri .. Ecco alcuni link di alcuni script batch che lo fanno

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

(Possibile dupplicato di)

https://stackoverflow.com/questions/5215729/is-there-a-way-to-pass-parameters-by-name-and-not-by-order-to-a-batch-bat-f


1
deve essere solo script batch :(. Abbiamo un severo requisito di essere uno script batch. Grazie mille :)
Dhiwakar Ravikumar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.