Передача аргументов командной строки в пакетный скрипт Windows

10

Мне нужно создать пакетный скрипт Windows, где мне нужно передать несколько аргументов командной строки. Эти аргументы могут появляться в любом порядке, но сценарий должен правильно их подбирать на основе имени аргумента. Например:

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

Сценарий может быть вызван любым из двух вышеуказанных способов, но возраст и пол следует правильно подобрать и присвоить переменным. Аргументы могут быть идентифицированы переключателем перед ними - т.е. -age, -gender и т. Д.

Может кто-нибудь дать мне пример идентификации этого внутри?

Дивакар Равикумар
источник

Ответы:

10

batch, к сожалению, не имеет встроенной getopsфункции, как . Тем не менее, вы можете реализовать свой собственный вариант для бедняков:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS
Mureinik
источник
это может быть громоздким, так как количество аргументов превышает, но это отвечает всем требованиям. Спасибо
Дивакар Равикумар
1
После robvanderwoude.com/if.php было бы лучше написать if /I "%~1" == "--age" ... (обратите внимание на тильду). Это также работает для пустых параметров или параметров, которые заключаются в двойные кавычки.
Аксель Кемпер
Вы можете добавить двойные кавычки. В противном случае инструкция не работает с пустым параметром% 1.
Аксель Кемпер
Если ваши различные возможные аргументы имеют заданный формат или тип, например, возраст (числовой) и пол («М» или «F»), вам не нужно определять аргументы, а вместо этого использовать распознавание сравнения, чтобы назначить их соответствующие переменные в скрипте. Я сделал это для раннего пакетного сценария, который я написал в течение переходного периода между 9x и XP на моей первой работе в области ИТ. Сценарий может принимать аргументы для типа ОС, диска, с которого выполнялся сценарий, и некоторых других вещей, или он может автоматически определять соответствующие параметры. Немного излишне, но забавное упражнение.
music2myear
8

Можете ли вы сделать это с Powershell? или это должно быть партия? Powershell делает это легко и просто, вам просто нужно добавить что-то вроде этого в начало вашего скрипта, а затем вы можете вызывать каждый параметр в любом порядке

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

Вы можете сделать это с помощью пакета, но это потребует много проверки параметров. Вот несколько ссылок на некоторые пакетные сценарии, которые делают это

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

(Возможно дублирование)

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

mrwhale
источник
1
это должны быть только пакетные сценарии :(. У нас есть строгое требование, чтобы это был пакетный сценарий. Хотя большое спасибо :)
Dhiwakar Ravikumar