コマンドライン引数をWindowsバッチスクリプトに渡す


10

いくつかのコマンドライン引数を渡す必要があるWindowsバッチスクリプトを作成する必要があります。これらの引数は任意の順序で表示されますが、スクリプトは引数名に基づいて適切に取得する必要があります。例えば:

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

スクリプトは上記の2つの方法のいずれかで呼び出すことができますが、年齢と性別を適切に取得して変数に割り当てる必要があります。引数は、それらの前のスイッチで識別できます。つまり、-age、-genderなどです。

誰かが私にこれを内部的に特定する例を教えてもらえますか?

回答:


10

残念ながら、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 2014

1
robvanderwoude.com/if.phpに続いて、次のように記述しますif /I "%~1" == "--age" ... (チルドに注意)。これは、空のパラメーターまたは二重引用符で囲まれたパラメーターに対しても機能します。
Axel Kemper 2014

二重引用符を追加することもできます。それ以外の場合、ステートメントは空のパラメーター%1では機能しません。
Axel Kemper 2014

考えられるさまざまな引数に、年齢(数値)や性別(「M」または「F」)などのフォーマットまたはタイプが設定されている場合、引数を定義する必要はありませんが、代わりに比較認識を使用して、スクリプト内の適切な変数。これは、最初のITジョブで9xからXPへの移行期間中に書いた初期のバッチスクリプトで行いました。スクリプトは、OSの種類、スクリプトの実行元のドライブ、その他いくつかの引数を受け入れるか、適切な設定を自動検出することができます。少しやりすぎですが、楽しい運動です。
music2myear 2014年

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.