Passando argumentos de linha de comando para um script de lote do Windows

10

Eu preciso criar um script em lotes do Windows no qual preciso passar alguns argumentos da linha de comando. Esses argumentos podem aparecer em qualquer ordem, mas o script deve pegá-los corretamente com base no nome do argumento. Por exemplo:

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

O script pode ser chamado em qualquer uma das duas formas acima, mas a idade e o sexo devem ser apropriadamente selecionados e atribuídos a variáveis. Os argumentos podem ser identificados pelo switch antes deles - ou seja, -age, -gender, etc.

Alguém por favor pode me dar um exemplo de identificar isso internamente?

    
por Dhiwakar Ravikumar 15.09.2014 / 07:27

2 respostas

10

lote, infelizmente, não tem uma função getops integrada como bash faz. No entanto, você poderia implementar sua própria variante de homem pobre:

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

Você pode fazer isso com o Powershell? ou precisa ser em lote? O Powershell torna isso fácil e agradável, você só precisa adicionar algo assim no topo do seu script, e então você pode chamar cada parâmetro em qualquer ordem

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

Você pode fazer isso com lote, mas isso exigirá muita verificação de parâmetros. Veja alguns links de alguns scripts em lote que fazem isso

link

(Possível dupplicação de)

link

    
por 15.09.2014 / 07:37