Melewati argumen baris perintah ke skrip kumpulan windows

10

Saya perlu membuat skrip batch windows di mana saya harus memberikan beberapa argumen baris perintah. Argumen ini dapat muncul dalam urutan apa pun, tetapi skrip harus mengambilnya dengan benar berdasarkan nama argumen. Misalnya:

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

Script dapat dipanggil dengan salah satu dari dua cara di atas, tetapi usia dan jenis kelamin harus diambil dan ditugaskan ke variabel. Argumen dapat diidentifikasi oleh saklar sebelum mereka - yaitu, -age, -gender, dll.

Bisakah seseorang tolong beri saya contoh mengidentifikasi ini secara internal?

Dhiwakar Ravikumar
sumber

Jawaban:

10

batch, sayangnya, tidak memiliki getopsfungsi bawaan seperti yang dimiliki . Namun, Anda dapat mengimplementasikan varian orang miskin Anda sendiri:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS
Mureinik
sumber
ini mungkin rumit karena jumlah argumen melebihi tetapi sesuai dengan tagihan. Terima kasih
Dhiwakar Ravikumar
1
Mengikuti robvanderwoude.com/if.php akan lebih baik untuk menulis if /I "%~1" == "--age" ... (perhatikan tilde). Ini juga berfungsi untuk parameter atau parameter kosong yang dimasukkan dalam tanda kutip ganda.
Axel Kemper
Anda mungkin ingin menambahkan tanda kutip ganda. Jika tidak, pernyataan ini tidak berfungsi dengan parameter kosong% 1.
Axel Kemper
Jika berbagai kemungkinan argumen Anda memiliki format atau tipe yang ditetapkan, seperti usia (menjadi numerik) dan jenis kelamin (menjadi "M" atau "F") Anda tidak harus mendefinisikan argumen, tetapi gunakan pengakuan perbandingan untuk menetapkannya ke variabel yang sesuai dalam skrip. Saya melakukan ini untuk skrip batch awal yang saya tulis selama periode transisi antara 9x dan XP pada pekerjaan TI pertama saya. Script dapat menerima argumen untuk tipe OS, drive dari mana script berjalan, dan beberapa hal lainnya, atau dapat secara otomatis mendeteksi pengaturan yang sesuai. Sedikit berlebihan, tapi olahraga yang menyenangkan.
music2myear
8

Bisakah Anda melakukannya dengan Powershell? atau perlu batch? Powershell membuatnya menyenangkan dan mudah, Anda hanya perlu menambahkan sesuatu seperti ini di bagian atas skrip Anda, dan kemudian Anda dapat memanggil setiap parameter dalam urutan apa pun

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

Anda dapat melakukannya dengan batch, tetapi akan membutuhkan banyak pemeriksaan parameter .. Berikut adalah beberapa tautan dari beberapa skrip batch yang melakukannya

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

(Kemungkinan duplikat dari)

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

mrwhale
sumber
1
itu harus hanya skrip batch :(. Kami memiliki persyaratan ketat bahwa itu skrip batch. Terima kasih banyak :)
Dhiwakar Ravikumar