Передача аргументів командного рядка до пакетного сценарію 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

це може бути громіздким, оскільки кількість аргументів перевищує, але це відповідає законопроекту. Спасибі
Dhiwakar Ravikumar

1
Слідом за robvanderwoude.com/if.php , краще буде написати if /I "%~1" == "--age" ... (зверніть увагу на тильду). Це також працює для порожніх параметрів або параметрів, які ставляться у подвійних лапках.
Аксель Кемпер

Ви можете додати подвійні лапки. В іншому випадку оператор не працює з порожнім параметром% 1.
Аксель Кемпер

Якщо ваші різні можливі аргументи мають заданий формат або тип, наприклад, вік (чисельний) та стать (будучи "M" або "F"), вам не слід визначати аргументи, а використовувати розпізнавання порівняння для призначення їх відповідні змінні в сценарії. Я зробив це для раннього пакетного сценарію, який я написав під час перехідного періоду між 9x та XP на моєму першому ІТ-роботі. Сценарій може або приймати аргументи для типу ОС, диска, з якого був запущений сценарій, та декількох інших речей, або він міг автоматично визначати відповідні налаштування. Трохи надмірність, але весела вправа.
music2myear

8

Ви можете це зробити з Powershell? чи це потрібно бути партійним? Powershell робить це приємно і просто, вам просто потрібно додати щось подібне у верхній частині сценарію, і тоді ви можете зателефонувати кожному параметру в будь-якому порядку

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

Це можна зробити за допомогою пакетної роботи, але для цього знадобиться багато перевірки параметрів. Ось кілька посилань деяких пакетних сценаріїв, які роблять це

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

(Можливий дублікат)

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


1
це повинні бути лише пакетні сценарії :(. У нас є сувора вимога, щоб це був пакетний сценарій. Хоча
велике спасибі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.