विंडोज एक्सप्लोरर में, हम प्रतिशत (%) प्रतीक के साथ एक फ़ोल्डर या फ़ाइल क्यों बना सकते हैं, यदि प्रतिशत प्रतीक का उपयोग मौजूदा चर के लिए किया जाता है?


13
  1. Windows Explorer पर जाएँ, और एक फ़ोल्डर / नामक निर्देशिका बनाने %systemdrive%, %windir%या किसी भी अन्य मौजूदा चर।
  2. कमांड प्रॉम्प्ट खोलें, और आपके द्वारा बनाए गए फ़ोल्डर पर जाएं।

आप नहीं कर सकते, क्योंकि %फोल्डर नाम में प्रतिशत ( ) प्रतीक हैं, कमांड प्रॉम्प्ट को भ्रमित करते हैं, क्योंकि प्रतिशत प्रतीक का उपयोग मौजूदा चर के लिए किया जाता है।

प्रतिशत से बचना %( %%) दो प्रतिशत प्रतीकों के साथ प्रतीक ( ) काम नहीं करता है, इसलिए डेविडपोस्टिल का उत्तर गलत है:

कमांड प्रॉम्प्ट विंडो, एक्सप्लोरर डेस्कटॉप के एक बिट के साथ दिखा तो, विंडोज एक्सप्लोरर में, हम प्रतिशत ( %) प्रतीक के साथ एक फ़ोल्डर या फ़ाइल क्यों बना सकते हैं , अगर प्रतिशत प्रतीक का उपयोग मौजूदा चर के लिए किया जाता है?

जवाबों:


16

हम प्रतिशत प्रतीक के साथ एक फ़ोल्डर / फ़ाइल क्यों बना सकते हैं?

%चरित्र एक फ़ाइल के नाम में एक आरक्षित वर्ण नहीं है।

नामकरण फ़ाइलें, पथ और नाम स्थान के लिए आरक्षित वर्ण हैं:

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

स्रोत नामकरण फ़ाइलें, पथ और नाम स्थान


प्रतिशत प्रतीक चरों के लिए आरक्षित है

अब, कमांड प्रॉम्प्ट खोलें और आपके द्वारा बनाए गए फ़ोल्डर में जाने का प्रयास करें।

आप नहीं कर सकते, क्योंकि फ़ोल्डर नाम में प्रतिशत प्रतीक हैं, यह दर्शाता है कि यह एक चर है।

उपरोक्त सत्य नहीं है। सब कुछ वैसा ही काम करता है जैसा आप उम्मीद करते हैं।

उदाहरण का उपयोग कर %test%:

F:\test>echo %test%
%test%

F:\test>md %test%

F:\test>cd %test%

F:\test\%test%>

उदाहरण का उपयोग कर %systemdrive%:

F:\test>echo %systemdrive%
C:

F:\test>md %systemdrive%
A subdirectory or file C: already exists.

F:\test>cd %systemdrive%
C:\Users\DavidPostill

F:\test>c:

C:\Users\DavidPostill>f:

F:\test>

F:\test>dir %systemdrive%
 Volume in drive C has no label.
 Volume Serial Number is C8D0-DF1E

 Directory of C:\Users\DavidPostill

03/06/2016  16:16    <DIR>          .
03/06/2016  16:16    <DIR>          ..
18/07/2015  19:25    <DIR>          .atom
03/06/2016  16:16    <DIR>          .oracle_jre_usage
08/05/2015  20:29    <DIR>          Contacts
03/06/2016  16:14    <DIR>          Desktop
01/06/2016  09:04    <DIR>          Documents
02/05/2016  12:55    <DIR>          Downloads
09/01/2015  11:51    <DIR>          dwhelper
08/05/2015  20:29    <DIR>          Favorites
20/02/2016  22:00    <DIR>          Jaikoz
08/05/2015  20:29    <DIR>          Links
17/03/2015  06:19    <DIR>          Music
29/03/2016  19:01    <DIR>          Pictures
08/05/2015  20:29    <DIR>          Saved Games
23/06/2016  10:55    <DIR>          Searches
02/05/2016  12:36    <DIR>          SecurityScans
11/04/2016  12:14               994 Start Menu - Shortcut.lnk
31/05/2016  00:52    <DIR>          temp
17/03/2015  06:19    <DIR>          Videos
               1 File(s)            994 bytes
              19 Dir(s)  69,716,357,120 bytes free

भागने के Percents

%चरित्र आदेश पंक्ति पैरामीटर और के लिए एक विशेष अर्थ नहीं है FORपैरामीटर।

एक प्रतिशत को एक नियमित चरित्र के रूप में मानने के लिए, इसे दोगुना करें:

%%

स्रोत वाक्यविन्यास


आगे की पढाई


1
नोट: सभी आरक्षित वर्ण NTFS फाइल सिस्टम पर लागू नहीं होते हैं। उदाहरण के लिए, लिनक्स का उपयोग करके, मैं आसानी से एक फ़ाइल बना सकता हूं जिसका नाम है <test>। यह बस विंडोज 'फ़ाइल प्रबंधन कार्यों का उपयोग नहीं किया जा सकता है।
नाथन उस्मान

2
@NathanOsman आप कच्चे निरपेक्ष पथ संकेतन ( \\?\C:\USERS\DEFAULT\<test>) का उपयोग करके विंडोज के भीतर से उन नामों के साथ फाइल बनाने में सक्षम हो सकते हैं ।
zwol

@zwol ओह? मुझे नहीं पता था। यह जानकर अच्छा लगा।
नाथन उस्मान

@zwol cmdशेल से नहीं ... F:\test>md \\?\f:\test\<test> कमांड का सिंटैक्स गलत है।
DavidPostill

@DavidPostill के बारे में क्या md \\^?\f:\test\^<test^>?
२२:५० पर जूल

11

डेविडपोस्टिल का जवाब बहुत अच्छा है, लेकिन नए लोगों को थोड़ा भ्रमित कर सकता है। मैं 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 सबसिस्टम कर सकता है।


आप पथ / कमांड नामों के लिए कीबोर्ड टैग का उपयोग क्यों करते हैं? यदि आप सिर्फ इनलाइन कोड फ़ॉर्मेटिंग का उपयोग करते हैं, तो यह वाक्यात्मक रूप से अधिक सही और अधिक पठनीय दोनों होगा। टाइप करना भी आसान होगा: इसके बजाय एक बैकटिक <kbd>
कॉडी ग्रे

किया हुआ। मैंने सोचा था कि <kbd> टैग </ kbd> की तुलना में अधिक स्पष्ट रूपरेखा थी code blocks। लेकिन अगर ऐसा कोई सवाल उठता है, तो मुझे लगता है कि वे भ्रम पैदा करते हैं।
जैक व्हाइट

2
"यह कमांड शेल का एक भागने का प्रतीक है" सही नहीं है। Cmd में भागने का चरित्र है ^%"एक ऐसा चरित्र है जिसका कमांड लाइन मापदंडों और मापदंडों के लिए एक विशेष अर्थ है। एक प्रतिशत को एक नियमित चरित्र के रूप में मानने के लिए, इसे दोगुना करें"।
डेविडपोस्टिल

वास्तव में, मेरे पास मिश्रित शब्द थे। अब जवाब सही दिया। धन्यवाद।
जैक व्हाइट

, आप केवल डबल इसके अलावा, कृपया ध्यान दें मेरा उत्तर में बताया गया है %में forहै कि forएक बैच फ़ाइल के अंदर है। for %%i in (*) do echo %%iएक कमांड प्रॉम्प्ट विंडो में टाइप करने से अनुचित उपस्थिति का हवाला देते हुए एक त्रुटि उत्पन्न होती है %%i
जैक व्हाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.