इस भ्रम के जवाब देने के बावजूद कि यह काम करता है, तथ्य यह है कि आप सामान्य cmd तर्कों में रिक्त स्थान में चुपके नहीं कर सकते। यह साबित करना आसान है:
सहेजें " echo %1
" के रूप में test.bat
। यह बैच फ़ाइल पहले तर्क का उत्पादन करेगी जो cmd हमें पास करता है।
अब, कोशिश करते हैं और चलाने test.bat
, के मूल्य की स्थापना %1
करने के लिए foo bar
। (ध्यान दें कि foo
और बीच में एक स्पेस चार है bar
।)
परीक्षण और त्रुटि कुछ वर्षों के लिए और पता चलता है कि वहाँ यह करने के लिए कोई रास्ता नहीं है । फॉक्स का उपयोग करने से बचने का सुझाव देगा ^
, फिर test.bat foo^ bar
भी आउटपुट नहीं होगा foo bar
।
इसलिए, आउटपुट प्राप्त करने का कोई तरीका नहीं है foo bar
, और जो निकटतम हम प्राप्त कर सकते हैं वह चल रहा है test.bat foo" "bar
जो उत्पादन करता है foo" "bar
, या test.bat "foo bar"
जो उत्पादन करता है "foo bar"
।
अब, कारण अन्य उत्तर दिखाई काम करने के लिए कारण है cd
करता है यह स्वयं की अतिरिक्त पार्स, हमेशा की तरह तर्क गुजर के व्यवहार (सामान्य से अपसारी %1
, %2
, %3
और ठेठ बैच फ़ाइलों में आदि)।
उदाहरण के लिए, अजीबोगरीब आदेश पर विचार करें:
cd c:\documents and settings \some folder with spaces
यह काम क्यों करता है? यह cd
अपने आप में 7 सामान्य तर्कों को एक तार्किक में शामिल करने के बराबर कुछ करने के कारण है । Cmd तर्क पासिंग मानदंडों के अनुसार, हम 7 तर्क देखते हैं:
c:\documents
and
settings
\some
folder
with
spaces
ऐसा लगता है जैसे कि cd
सभी 7 तर्कों को एक तार्किक में मिला दिया गया है array.join(" ")
, जो कुछ ऐसा कर रहा है , जो पथ का निर्माण करता है:
c:\documents and settings \some folder with spaces
ध्यान दें कि यह व्यवहार केवल (और कुछ अन्य कार्यों) के लिए अजीब हैcd
। इसका सामान्य तर्क से कोई लेना-देना नहीं है।
वास्तव में, cd
एक और ख़ासियत है। याद रखें कि हमने ऊपर कहा था कि हम आउटपुट प्राप्त नहीं कर सकते हैं foo bar
? निकटतम आउटपुट हम प्राप्त कर सकते हैं:
test.bat foo" "bar
जो पैदा करता है foo" "bar
, या:
test.bat "foo bar"
जो पैदा करता है "foo bar"
, या:
test.bat "foo "bar
जो पैदा करता है "foo "bar
, या:
test.bat foo" bar"
जो पैदा करता है foo" bar"
, या:
test.bat "foo b"ar
जो पैदा करता है "foo b"ar
, या:
test.bat fo"o bar"
जो पैदा करता है fo"o bar"
, या:
test.bat fo"o ba"r
जो पैदा करता है fo"o ba"r
, या:
test.bat "fo"o" bar"
जो पैदा करता है "fo"o" bar"
, या:
test.bat "f""o""o"" ""b""a""r":
जो पैदा करता है "f""o""o"" ""b""a""r"
, या यहां तक कि:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
जो पैदा करता है """"f"""o""""o"" ""ba"""r""""""""""
।
उपरोक्त सभी उदाहरणों में एक समानता है, जो कि foo bar
हम "
वर्णों को छाँटने के बाद उत्पन्न करेंगे । cd
के लेखक एहसास हो जाना चाहिए यह भी ... हम से अनुमान लगाने के लिए थे cd
'अजीब व्यवहार जो रों सभी को ट्रिम "
यह प्राप्त करता है , इन आदेशों के सभी काम करने के लिए अनुमति देता है:
cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs