Передача аргументов командной строки в пакетный скрипт 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

это может быть громоздким, так как количество аргументов превышает, но это отвечает всем требованиям. Спасибо
Дивакар Равикумар

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


1
это должны быть только пакетные сценарии :(. У нас есть строгое требование, чтобы это был пакетный сценарий. Хотя большое спасибо :)
Dhiwakar Ravikumar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.