Windows toplu komut dosyasına komut satırı bağımsız değişkenleri iletme


10

Birkaç komut satırı argümanları geçmek gerekir bir windows toplu iş komut dosyası oluşturmak gerekir. Bu bağımsız değişkenler herhangi bir sırada görünebilir, ancak komut dosyası, bağımsız değişken adına göre bunları düzgün bir şekilde almalıdır. Örneğin:

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

Komut dosyası yukarıdaki iki yoldan biriyle çağrılabilir, ancak yaş ve cinsiyet düzgün bir şekilde alınmalı ve değişkenlere atanmalıdır. Argümanlar önlerindeki anahtarla tanımlanabilir - yani, -age, -gender vb.

Birisi bana bunu dahili olarak tanımlamak için bir örnek verebilir mi?

Yanıtlar:


10

toplu iş maalesef getops gibi yerleşik bir işleve sahip değil . Ancak, kendi zavallı adamın varyantını uygulayabilirsiniz:

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

argümanların sayısı aşıldığı için bu külfetli olabilir, ancak faturaya uyar. Teşekkürler
Dhiwakar Ravikumar

1
Aşağıdaki robvanderwoude.com/if.php o yazma daha iyi olurdu if /I "%~1" == "--age" ... (tilde dikkat edin). Bu, boş parametreler veya çift tırnak içine alınmış parametreler için de geçerlidir.
Axel Kemper

Çift tırnak işareti eklemek isteyebilirsiniz. Aksi takdirde, ifade boş% 1 parametresiyle çalışmaz.
Axel Kemper

Çeşitli olası bağımsız değişkenleriniz yaş (sayısal) ve cinsiyet ("M" veya "F") gibi belirli bir biçim veya türe sahipse, bağımsız değişkenleri tanımlamanız gerekmez; bunun yerine, betiğin içindeki uygun değişkenler. Bunu ilk BT işimde 9x ve XP arasında bir geçiş döneminde yazdığım erken bir toplu senaryo için yaptım. Komut dosyası, işletim sistemi türü, komut dosyasının çalıştığı sürücü ve birkaç başka şey için bağımsız değişkenleri kabul edebilir veya uygun ayarları otomatik olarak algılayabilir. Biraz abartılı ama eğlenceli bir egzersiz.
music2my

8

Powershell ile yapabilir misin? veya toplu olması gerekiyor mu? Powershell bunu güzel ve kolay hale getirir, betiğinizin üstüne böyle bir şey eklemeniz gerekir ve ardından her parametreyi herhangi bir sırayla çağırabilirsiniz

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

Toplu olarak yapabilirsiniz, ancak birçok parametre denetimi gerektirecektir. İşte bazı toplu komut dosyalarının birkaç bağlantısı

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

(Olası dupplicate)

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


1
. o Bunun bir toplu komut dosyası olması sıkı bir şartı var :( sadece toplu komut olmak zorundadır Çok teşekkürler :) gerçi.
Dhiwakar Ravikumar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.