विंडोज़ बैच स्क्रिप्ट में कमांड-लाइन तर्क पास करना


10

मुझे एक विंडोज़ बैच स्क्रिप्ट बनाने की आवश्यकता है जहां मुझे कुछ कमांड-लाइन तर्क पास करने की आवश्यकता है। ये तर्क किसी भी क्रम में प्रकट हो सकते हैं, लेकिन स्क्रिप्ट को तर्क नाम के आधार पर उन्हें ठीक से चुनना चाहिए। उदाहरण के लिए:

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

स्क्रिप्ट को उपरोक्त दोनों तरीकों में से किसी में भी बुलाया जा सकता है लेकिन उम्र और लिंग को ठीक से उठाया जाना चाहिए और चर को सौंपा जाना चाहिए। तर्कों को उनके सामने स्विच द्वारा पहचाना जा सकता है - यानी, -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 रविकुमार

1
Robvanderwoude.com/if.php के बाद लिखना बेहतर होगा if /I "%~1" == "--age" ... (ध्यान दें)। यह खाली मापदंडों या मापदंडों के लिए भी काम करता है जिन्हें दोहरे उद्धरण चिह्नों में रखा जाता है।
एक्सल केम्पर

आप दोहरे उद्धरण चिह्नों को जोड़ना चाह सकते हैं। अन्यथा, बयान खाली पैरामीटर% 1 के साथ काम नहीं करता है।
एक्सल केम्पर

यदि आपके विभिन्न संभावित तर्कों में एक निर्धारित प्रारूप या प्रकार है, जैसे कि उम्र (संख्यात्मक) और लिंग ("M" या "F") आपको तर्क को परिभाषित नहीं करना चाहिए, लेकिन इसके बजाय उन्हें असाइन करने के लिए तुलना मान्यता का उपयोग करें स्क्रिप्ट के भीतर उपयुक्त चर। मैंने अपनी शुरुआती आईटी नौकरी में 9x और XP के बीच संक्रमण काल ​​के दौरान लिखी एक शुरुआती बैच स्क्रिप्ट के लिए ऐसा किया था। स्क्रिप्ट या तो OS प्रकार के लिए तर्कों को स्वीकार कर सकती है, स्क्रिप्ट जिस ड्राइव से चल रही थी, और कुछ अन्य चीजें, या यह उपयुक्त सेटिंग्स का स्वत: पता लगा सकती है। थोड़ा ओवरकिल, लेकिन एक मजेदार व्यायाम।
संगीत 2

8

क्या आप इसे पॉवर्सहेल के साथ कर सकते हैं? या यह बैच होने की जरूरत है? पॉवरशेल इसे अच्छा और आसान बनाता है, आपको बस अपनी स्क्रिप्ट के शीर्ष पर कुछ इस तरह से जोड़ना होगा, और फिर आप किसी भी क्रम में प्रत्येक पैरामीटर को कॉल कर सकते हैं

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
इसे केवल बैच स्क्रिप्ट होना चाहिए :(। हमें इसकी सख्त आवश्यकता है कि यह एक बैच स्क्रिप्ट है। बहुत बहुत धन्यवाद, हालांकि :)
धीवाकर रविकुमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.