2010-11-11 10 views
7

मेरे पास स्पेस की तुलना में अल्पविराम के विषय पर, प्रश्नों को सीमित करने में विषय पर कुछ प्रश्न हैं।cmd-comma अलग पैरामीटर के लिए अंतरिक्ष की तुलना में?

वे प्रश्न हैं जो C प्रोग्रामर cmd शीघ्र से परिचित, पर कुछ प्रकाश फेंक करने में सक्षम हो सकता है ..

मुझे पता है कि जब

c:\>program a b c 

कर 4 मानकों [0]=program[1]=a[2]=b[3]=c देखते हैं

hh ntcmds.chm अवधारणाओं के अनुसार ..

शैल सिंहावलोकन

; and , are used to separate parameters 

; or , command1 parameter1;parameter2 Use to separate command parameters. 

मैं dir a,b देखते हैं,

c:\>program a,b,c देता पैरामीटर [0] = कार्यक्रम [1] = ए, बी के रूप में dir a b

लेकिन

एक ही परिणाम देता है ग

तो कुछ करो? या सब? विंडोज आदेश का उपयोग करें; तथा , ? और क्या वह प्रत्येक आदेश के कोड के भीतर व्याख्या है, या शैल द्वारा अंतरिक्ष के साथ किया जाता है?

और यदि यह प्रत्येक कमांड के कोड में है .. मुझे कैसे पता चलेगा कि यह कौन सा करता है? मुझे पता है कि explorer.exe का दस्तावेज अल्पविराम का उल्लेख करता है, उदाहरण के लिए। आप explorer /e,.

लेकिन डीआईआर/कर सकते हैं? इसका जिक्र नहीं है, लेकिन इसका उपयोग कर सकते हैं। और एक ठेठ सी प्रोग्राम बिल्कुल एक डिलीमीटर के रूप में नहीं लेता है .. तो क्या यह मामला है कि खोल कम से कम अल्पविराम का उपयोग नहीं करता है, यह अंतरिक्ष का उपयोग करता है। और विंडोज़ कमांड जो करते हैं, ऐसा करते हैं 'क्या वे हैं (सभी?) कॉमा का इस्तेमाल होने पर शैल ने उन्हें दिए गए पैरामीटर को सीमित करने के लिए लिखा है?

उत्तर

4

दो अंतर यूनिक्स और विंडोज के बीच यहाँ हैं:

ऐसे DIR रूप
  • आंतरिक आदेशों खोल में निर्माण कर रहे हैं; उनके कमांड लाइन सिंटैक्स को नियमित नियमों के लिए समान नियमों का पालन नहीं करना पड़ता है
  • विंडोज़ पर, प्रोग्राम अपनी कमांड लाइनों को पार्स करने के लिए ज़िम्मेदार हैं। खोल रीडायरेक्ट और पाइप पार्स करता है, तो एक स्ट्रिंग में कार्यक्रम के लिए कमांड लाइन के बाकी गुजरता

विंडोज सी कार्यक्रमों दृश्य स्टूडियो माइक्रोसॉफ्ट सी क्रम में कमांड लाइन पार्सर है, जो एक के समान है का उपयोग का उपयोग करके बनाया ठेठ यूनिक्स शैल पार्सर और रिक्त स्थान और उद्धरण चिह्नों का पालन करता है।

मैंने कभी सी प्रोग्राम नहीं देखा है जो कमांड लाइन विभाजक के रूप में , या ; का उपयोग करता है। मुझे explorer /e,. के लिए विशेष मामले के बारे में पता था, लेकिन मैंने अभी तक dir a,b उदाहरण कभी नहीं देखा होगा।

+0

आप कैसे बता सकते हैं कि खोल द्वारा क्या किया जाता है, और एमएस सी रनटाइम या मानक lib द्वारा क्या किया जाता है? मेरे पास विंडोज़ सी प्रोग है जिसमें #include शीर्ष पर, और argv प्रदर्शित करने के लिए कोड है। जीसीसी के साथ संकलित। मैं एक तरीका नहीं देख सकता जो मैं देख सकता हूं कि कौन सा "पैरामीटरकरण" खोल से किया जाता है और जो मानक पुस्तकालय से स्वचालित होता है। साथ ही, मुझे लगता है कि अल्पविराम बाहरी प्रोग्राम xcopy या telnet के लिए काम नहीं करता है। मुझे लगता है कि मैंने इसे rundll32 के लिए देखा है। मुझे लगता है कि यह सिर्फ कुछ है। सार्वजनिक रूप से उपलब्ध लाइब्रेरी में कोई फ़ंक्शन नहीं हो सकता है! हो सकता है कि यह केवल असाधारण ext प्रोग्राम cmd.exe – barlop

+0

के आंतरिक cmds को अपनाने के लिए कर रहा है, सबकुछ एमएस सी रनटाइम द्वारा खोल कार्यक्षमता को छोड़कर किया जाता है। शेल कार्यक्षमता में पुनर्निर्देशन ('<', '> ', आदि' >> '), पाइपिंग (' | '), प्रवाह नियंत्रण (' && 'और' || ') और भागने ('^') जैसी चीजें शामिल हैं। जैसा कि मैंने कहा है, मैंने कभी ऐसा प्रोग्राम नहीं देखा है जो कमांड लाइन पर ',' का उपयोग करता है, इसलिए मुझे आश्चर्य नहीं है कि प्रतिलिपि और टेलनेट इसका समर्थन नहीं करता है। –

+0

क्या आप सुझाव दे रहे हैं कि एमएस सी रनटाइम रिक्त स्थान और उद्धरण को सीमित करता है? या वह अभी भी खोल है? और यदि यह एमएस सी रनटाइम है, तो क्या आप इसे साबित कर सकते हैं? मैं नहीं देखता कि आपका दूसरा बुलेट प्वाइंट यूनिक्स और विंडोज़ को अलग करने के तरीके को कैसे अनदेखा करता है, रीडायरेक्ट और पाइप को भी पार्स नहीं करता है। – barlop

0

बैच फ़ाइलें एक वैकल्पिक तर्क विभाजक के रूप में अल्पविराम या अर्धविराम का उपयोग करती हैं।

टेस्ट बैच फ़ाइल:

@echo %1/%2/%3 

टेस्ट रन:

> test.cmd 1,2,3 
1/2/3 
> test.cmd 1;2 3 
1/2/3 

और, जैसा कि आप ध्यान दें, dir इसे इस्तेमाल करता है, copy रूप में अच्छी तरह - उन दोनों खोल बनाया-इन कर रहे हैं और शायद के माध्यम से चलाने बैच फ़ाइलों की तरह एक समान पार्सर भी (यह बिल्कुल वही नहीं है, क्योंकि आप cd.. या dir/s जैसी चीजें कर सकते हैं जो किसी और चीज़ के लिए संभव नहीं हैं)। मुझे लगता है (नोट: अटकलें) यह कुछ प्रकार की पिछली संगतता है जो डीओएस या सीपी/एम दिनों में वापस जाती है। आजकल आपको शायद रिक्त स्थान का उपयोग करना चाहिए। और टिम नोट्स के रूप में, सी रनटाइम तर्कों के बारे में कुछ चीजों को निर्देशित करता है और उन्हें कैसे पार्स किया जाना चाहिए। कई अन्य भाषाएं/ढांचे उस सम्मेलन का पालन करते हैं लेकिन जरूरी नहीं। उदाहरण के लिए पावरशेल में पूरी तरह से अलग तर्क हैंडलिंग है और कभी-कभी मूल कार्यक्रमों के साथ बातचीत करते समय यह आश्चर्यचकित हो सकता है (कहा जा रहा है कि, PowerShell cmdlets और फ़ंक्शन कोई प्रोग्राम निष्पादन योग्य नहीं हैं, लेकिन बैच फ़ाइलें भी इसी प्रकार हैं)।

+1

आपने लिखा है "पावरशेल cmdlets और फ़ंक्शंस कोई प्रोग्राम निष्पादन योग्य नहीं हैं, लेकिन बैच फ़ाइलों को भी इसी तरह" क्या यह नहीं होना चाहिए, और लेकिन हटा दिया गया है? जैसा कि आप कहते हैं बैच फाइलें, शक्तियों से नहीं चल सकती हैं, इसलिए मुझे नहीं पता कि वहां 'लेकिन' क्यों है। – barlop

संबंधित मुद्दे