में समतुल्य स्विच स्टेटमेंट मुझे आश्चर्य है कि एक एकल अभिव्यक्ति के मूल्य के आधार पर विंडोज बैच फ़ाइल में शाखा निष्पादन का एक आसान तरीका है या नहीं। सी, सी ++, सी #, जावा, जावास्क्रिप्ट, PHP और अन्य वास्तविक प्रोग्रामिंग भाषाओं में स्विच/केस ब्लॉक के समान कुछ।विंडोज बैच फ़ाइल
IF "%ID%"=="0" (
REM do something
) ELSE IF "%ID%"=="1" (
REM do something else
) ELSE IF "%ID%"=="2" (
REM do another thing
) ELSE (
REM default case...
)
तो गूंगा:
मेरी केवल वैकल्पिक हल एक सादे अगर/बाकी ब्लॉक जहां एक ही अभिव्यक्ति बार-बार विभिन्न मूल्यों के खिलाफ समानता के लिए चेक किया गया है है। कोई बेहतर समाधान?
एक और तरीका (हालांकि मैं गोटो का सुझाव देने के लिए चिल्ला रहा हूं!) .... आप लेबल 'आईडीआई'': आईडी 2' आदि बना सकते हैं, और एक 'गोटो आईडी% आईडी%' को प्रासंगिक पर कूदना चाहिए। लेकिन जिस तरह से आप पहले से ही कर रहे हैं वह इतना भयानक नहीं है, है ना? मुझे यकीन है कि ऐसी अन्य भाषाएं हैं जहां संपूर्ण अभिव्यक्ति प्रत्येक मामले/स्विच लाइन पर है। –
ध्यान रखें कि कई भाषाओं में 'स्विच' कथन है (यह कम से कम सी और सी ++ के लिए सच है) कि निर्माण गति-अनुकूलन उद्देश्यों के लिए उपयोग किया जाता है, क्योंकि यह if-else-if श्रृंखला की बार-बार तुलना से बचाता है, जो महंगा हो सकता है। आम तौर पर इस मामले में 'स्विच' का उपयोग करने में कोई ** बड़ी ** पठनीयता लाभ नहीं होती है, क्योंकि जंजीर तुलना उस बदसूरत नहीं होती है (आप केवल स्थिर के खिलाफ तुलना करते हैं)। मुझे आशा है कि आपका प्रश्न जिज्ञासा से प्रेरित होगा और आप वास्तव में बैच फ़ाइल को गति-अनुकूलित नहीं करना चाहते हैं! :-) ;-) –
@LorenzoDonati मैं 'IF' /' ELSE' निर्माण (जो पठनीयता के साथ आया था) की पठनीयता के बारे में शिकायत नहीं कर रहा हूं? मुझे लगता है कि यह समान कोड लिखने के लिए स्मार्ट और त्रुटि-प्रवण नहीं है। और नहीं, चिंता न करें ... गति भी चिंता का विषय नहीं है :-) मैं सिर्फ उत्सुक हूं क्योंकि बैच स्क्रिप्ट कोडिंग करते समय मैंने कई बार इस तरह की समस्याओं में भाग लिया है। –