डेविडपोस्टिल का जवाब बहुत अच्छा है, लेकिन नए लोगों को थोड़ा भ्रमित कर सकता है। मैं rephrase करने की कोशिश करेंगे।
%एक आरक्षित वर्ण नहीं है ।
यह कमांड शेल (उर्फ और ) के लिए विशेष अर्थ वाला एक चरित्र हैcmd.execommand.com
अंतर यह है:
- आप सभी आरक्षित वर्णों का उपयोग नहीं कर सकते (लेकिन नीचे देखें)
- आप विशेष और भागने के पात्रों का उपयोग करने में सक्षम हो सकते हैं - बस उन्हें टाइप करके नहीं
दूसरे शब्दों में, आप %उनके नाम से युक्त फ़ाइल या फ़ोल्डर बना सकते हैं । आप इसे सीधे विंडोज़ एक्सप्लोरर का उपयोग कर सकते हैं क्योंकि %इसका कोई विशेष अर्थ नहीं है। आपको कमांड प्रॉम्प्ट पर ऐसी फाइलें बनाने से रोकने का कोई इरादा नहीं था, लेकिन क्योंकि %वहाँ एक विशेष अर्थ है, आपको ऐसी फ़ाइलों को बनाने के लिए नीचे दिए गए सिंटैक्स का उपयोग करने की आवश्यकता है।
बैट-फ़ाइलें
यदि आप एक बैच फ़ाइल (* .bat, * .cmd) लिख रहे हैं , जो कि %वस्तुतः उपयोग करने के लिए कमांड शेल (उर्फ कमांड प्रॉम्प्ट एप्लिकेशन) द्वारा निष्पादित किया जाता है, (जैसे %कि नाम के साथ एक फ़ाइल बनाने के लिए , और स्थानापन्न करने के लिए नहीं। एक चर या पैरामीटर) आपको %%इसके बजाय टाइप करना होगा।
उदाहरण के लिए,
- कमांड
echo %windir%आउटपुट का उत्पादन करता है:c:\windows
- हालाँकि, कमांड
echo %%windir%%आउटपुट का उत्पादन करता है:%windir%
- और इसी तरह: कमांड
echo %%%%windir%%%%आउटपुट का उत्पादन करता है:%%windir%%
इसलिए यदि आप निम्न पंक्ति को सहेजते हैं test.batऔर इसे चलाते हैं, तो यह %test%प्रतिशत निर्देशिकाओं के साथ पूर्ण नाम की एक निर्देशिका बनाएगा :
md %%test%%
यदि कोई नामांकित चर नहीं है test, तो यह अगला कमांड पिछले एक के बराबर है - यह एक निर्देशिका भी बनाता है %test%:
md %test%
... लेकिन कृपया ऐसा कभी न करें कि चूंकि आपका आदेश उस तरह का व्यवहार नहीं करेगा जैसा आप चाहते थे कि कोई व्यक्ति उस नाम से एक चर बनाता है
यदि आप forBAT-file में कमांड का उपयोग करने का इरादा रखते हैं , तो आपको भी दोगुना करने की आवश्यकता है %ताकि forकमांड शेल के लिए कमांड के बजाय इसका विशेष अर्थ होगा :
for %%i in (*.*) do echo %%i
यह वर्तमान निर्देशिका (जो %%iविशेष अर्थ रखता है) में फ़ाइलों की एक सूची का उत्पादन करेगा , और मुझे यकीन नहीं है कि अगले अनुभाग में वर्णित वर्कअराउंड ( यहां काम नहीं करता है) का %%iसहारा लिए बिना इसे शाब्दिक उत्पादन कैसे किया जाए ।%p%%%%%i
%कमांड प्रॉम्प्ट पर विशेष अर्थ वाला एकमात्र चरित्र नहीं है। अन्य शामिल हैं ^, <, >, |, (, ), &, !, "। उनमें से अधिकांश (को छोड़कर ") बच सकते हैं - ^अर्थात्, भागने के चरित्र के साथ उपसर्ग किया जाता है ताकि एक शाब्दिक चरित्र डाला जाए, इसके विशेष अर्थ को दबाकर। वे भी अपने विशेष कार्य को डबलकॉटेड स्ट्रिंग के अंदर खो देते हैं, और "बैकस्लैश के साथ बच जाते हैं \":। कुछ कैरेट ( ^) को डबल -कोट-संलग्न स्ट्रिंग के अंदर दोगुना करने की आवश्यकता हो सकती है और जहां विलंबित चर प्रतिस्थापन होता है ( !विशेष अर्थ)।
सही कमाण्ड
दुर्भाग्य से, जब कमांड प्रॉम्प्ट विंडो में सीधे कमांड टाइप करता है, तो दोहरीकरण %वर्ण बस उत्पन्न करता है %%अर्थात उपरोक्त दृष्टिकोण उस मामले में काम नहीं करता है।
प्रतीत होता है कि कमांड प्रॉसेसिंग में एक क्वर्क का शोषण होता है - आप बाद में %टाइप करके शाब्दिक प्राप्त कर सकते हैं । हालांकि यह दृष्टिकोण मूर्खतापूर्ण नहीं है: यदि आपका फ़ाइल नाम दोहरे उद्धरणों में संलग्न है, तो शाब्दिक रूप से व्याख्या की जाती है (और उद्धरण के बिना इसे हटाया नहीं जाता है)^%^
- कमांड
echo %windir%आउटपुट का उत्पादन करता है:c:\windows
- कमांड
echo %^windir%आउटपुट का उत्पादन करता है:%windir%
- कमांड
echo "%^windir%"आउटपुट उत्पन्न करता है: "%^windir%"(अतिरिक्त ^- वह नहीं जो हम चाहते थे)
मैं इसके बजाय एक और समाधान सुझाता हूं:
- इस तरह एक चर बनाएं:
set "p=%"
- का उपयोग
%p%: जहाँ आप एक शाब्दिक प्रतिशत चिह्न की जरूरत है echo "%p%windir%p%"अब उत्पादन का उत्पादन होगा:"%windir%"
उसी वर्कअराउंड का उपयोग forकमांड में शाब्दिक प्रतिशत चिन्ह प्राप्त करने के लिए किया जा सकता है , हालांकि ध्यान दें कि BAT- फाइलों के विपरीत जब forकमांड को सीधे कुंजी करते हैं तो आप डबल प्रतिशत संकेत नहीं देते हैं।
फाइलसिस्टम आरक्षित वर्ण
आप सामान्य रूप से एक फ़ाइल या निर्देशिका नहीं बना सकते हैं, जिसमें उसके नाम में आरक्षित वर्ण हों: / ? < > \ : * | "NULL- प्रतीक और 1 से 31 कोड वाले वर्ण; अंतरिक्ष. और अंतिम वर्ण भी नहीं हो सकते; और निम्नलिखित नाम अवैध हैं :।com1 com2 com3 com4 com5 com6 com7 com8 com9 lpt1 lpt2 lpt3 lpt4 lpt5 lpt6 lpt7 lpt8 lpt9 con nul prn
हालाँकि, इन प्रतिबंधों में से कुछ को \\?\इस तरह से फ़ाइल उपसर्ग को दरकिनार किया जा सकता है \\?\c:\test...\nul:। कम से कम आरक्षित नामों वाली फाइलें और स्पेस और डॉट के साथ समाप्त होने वालों को उस तरह से हेरफेर किया जा सकता है।
क्या अधिक है, NTFS फाइलसिस्टम स्वयं कई नामकरण उप-प्रणालियों का समर्थन करता है: डॉस, विंडोज और पोसिक्स। यह विंडोज सबसिस्टम है जिसमें ऊपर सभी प्रतिबंध हैं, जबकि पोसिक्स केवल निषिद्ध /और पूर्ण-प्रतीक है।
GNU / Linux OS (POSIX का एक सुपरसेट) इस प्रकार (/ हटाएं) फ़ाइल / निर्देशिका नाम बना सकता है जो कि अधिकांश सामान्य विंडोज़ एपीआई फ़ंक्शन (और इसलिए विंडोज़ प्रोग्राम) के साथ काम नहीं कर सकता है। विंडोज एक्सपी पर उनके साथ काम करना "यूनिक्स सबसिस्टम के लिए सेवाएं" (एसएफयू) मुक्त करके संभव था; विस्टा और उसके बाद तीसरे पक्ष के उपकरण इसके लिए आवश्यक हैं। मुझे यकीन नहीं है कि अगर नया ubuntu-on-windows10 सबसिस्टम कर सकता है।
<test>। यह बस विंडोज 'फ़ाइल प्रबंधन कार्यों का उपयोग नहीं किया जा सकता है।