windows - "X को आंतरिक या बाहरी कमांड, ऑपरेशनल प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं दी गई" क्या कारण है?




batch-file cmd (2)

मेरे पास एक-लाइन स्निपेट है जो कमांड लाइन में पूरी तरह से काम करता है, लेकिन जब मैं इसे एक बैच स्क्रिप्ट के हिस्से के रूप में चलाता हूं तो वह विफल हो जाता है और त्रुटियों को फेंकता है।

नीचे दिए गए आदेशों के अनुसार, फ़ोल्डर में सभी खाली सबफ़ोल्डरों को हटाकर व्यवहार किया जाता है।

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

हालांकि, जब एक बैच फ़ाइल में डाल दिया ...

FOR /f "delims=" %%d in ('dir /s /b /ad ^| sort /r') do rd "%%d"

... यह मानक त्रुटि फेंकता है:

सॉर्ट को आंतरिक या बाहरी कमांड के रूप में मान्यता नहीं दी जाती है

मैं पिछले एक-एक घंटे के साथ प्रयोग कर रहा हूं और पाइप से बचकर, विकल्पों के क्रम को बदलते हुए, dir और sort , दोनों के प्रलेखन को देख रहा हूं, लेकिन मैं अभी भी यह पता नहीं लगा पाया हूं कि क्या है यहाँ चल रहा है। शेष बैच फ़ाइल, जो केवल कुछ पंक्तियाँ है, ठीक काम करती है, और इसमें यह एकमात्र पंक्ति है जो विफल हो जाती है।

क्या कोई मदद कर सकता है?


A) विंडोज कमांड इंटरप्रिटर कमांड के लिए कैसे खोज करता है?

विंडोज कमांड दुभाषिया एक निष्पादन के लिए खोज करता है जिसे निष्पादित करने के लिए

  1. cmd.exe का आंतरिक कमांड नहीं है और
  2. फ़ाइल एक्सटेंशन और पथ के बिना फ़ाइल नाम के साथ निर्दिष्ट किया गया है

पैटर्न command.* मेल करने वाली फ़ाइल के लिए command.* और स्थानीय पर्यावरण चर PATHEXT में सूचीबद्ध फ़ाइल एक्सटेंशन होने

  1. पहली वर्तमान निर्देशिका में और
  2. स्थानीय पर्यावरण चर PATH सभी निर्देशिकाओं में अगला।

SORT और FIND और FINDSTR और ROBOCOPY और XCOPY और कई और कमांड cmn.exe के आंतरिक कमांड नहीं हैं। वे सांत्वना अनुप्रयोग हैं, जो विंडोज में डायरेक्टरी %SystemRoot%\System32 में स्थित है जिसका फ़ाइल नाम sort.exe , find.exe , findstr.exe , robocopy.exe , xcopy.exe , ...

विंडोज पर डिफ़ॉल्ट रूप से उपलब्ध ऐसे कंसोल एप्लिकेशन को विंडोज ऑपरेटिंग सिस्टम के साथ इंस्टॉल नहीं किए गए कंसोल एप्लिकेशन से बेहतर अंतर करने के लिए बाहरी कमांड कहा जाता है।

बी) पर्यावरण चर पथ को कैसे परिभाषित किया गया है?

PATH चर के 3 प्रकार हैं:

  1. सिस्टम PATH जो सभी खातों के लिए उपयोग किया जाता है और कुंजी के तहत विंडोज रजिस्ट्री में संग्रहीत किया जाता है:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
    
  2. उपयोगकर्ता PATH जो केवल चालू खाते के लिए उपयोग किया जाता है और कुंजी के तहत विंडोज रजिस्ट्री में संग्रहीत किया जाता है:

    HKEY_CURRENT_USER\Environment
    
  3. स्थानीय PATH जो हमेशा मूल प्रक्रिया की स्थानीय PATH की एक प्रति है, जिसने वर्तमान प्रक्रिया शुरू की।

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

एक नई प्रक्रिया शुरू करने पर विंडोज द्वारा नई प्रक्रिया के लिए संपूर्ण वर्तमान में सक्रिय वातावरण चर तालिका की प्रतिलिपि बनाई जाती है।

मूल प्रक्रिया किसी भी बच्चे की प्रक्रिया के पर्यावरण चर को संशोधित नहीं कर सकती है और न ही एक बच्चे की प्रक्रिया अपनी मूल प्रक्रिया के पर्यावरण चर को संशोधित कर सकती है।

इसका मतलब है कि एक बार बैच फ़ाइल के निष्पादन के लिए cmd.exe जैसी प्रक्रिया शुरू कर दी गई थी, इस प्रक्रिया के पास पर्यावरण चर का अपना सेट है जिसे केवल प्रक्रिया ही संशोधित कर सकती है। कोई अन्य प्रक्रिया पहले से चल रही प्रक्रिया के वातावरण चर को संशोधित नहीं कर सकती है।

ग) त्रुटि संदेश का क्या अर्थ है?

त्रुटि संदेश

'...' को आंतरिक या बाह्य कमांड के रूप में मान्यता नहीं दी जाती है,
संचालन कार्यक्रम या बैच फ़ाइल।

हमेशा इसका मतलब है

  1. फ़ाइल का नाम a

    • सांत्वना आवेदन
    • जीयूआई आवेदन
    • स्क्रिप्ट (बैच फ़ाइल, PowerShell स्क्रिप्ट, पर्ल स्क्रिप्ट, VBScript, JScript, ...)


    निष्पादन योग्य / स्क्रिप्ट फ़ाइल के बिना फ़ाइल एक्सटेंशन और बिना (पूर्ण) पथ के निष्पादन की संभावना के लिए निर्दिष्ट किया गया था

  2. Windows पैटर्न FileName.* मेल खाते एक फ़ाइल को खोजने में विफल रहा FileName.* वर्तमान में सक्रिय पर्यावरण चर PATHEXT में वर्तमान में या किसी अन्य निर्देशिका में सक्रिय वातावरण चर PATH में सूचीबद्ध फ़ाइल एक्सटेंशन के साथ।

डी) इस त्रुटि संदेश के संभावित कारण क्या हैं?

विशिष्ट कारण हैं:

1. टाइप करने की गलती के कारण फ़ाइल का फ़ाइल नाम गलत था।

चरित्र द्वारा कमांड / निष्पादन योग्य का नाम जांचें।

2. वर्तमान निर्देशिका फ़ाइल को निष्पादित करने के लिए निर्देशिका से अलग है।

रन echo Current directory is: %CD% कमांड लाइन पर echo Current directory is: %CD% या इस लाइन को कमांड लाइन के ऊपर बैच फाइल में जोड़ें जो यह देखने में विफल रहता है कि करंट डायरेक्टरी क्या है।

3. चलाने के लिए निष्पादन योग्य या स्क्रिप्ट बिल्कुल भी स्थापित नहीं है।

चलाने के लिए निष्पादन योग्य के अस्तित्व की पुष्टि करें। कुछ इंस्टॉलेशन पैकेज केवल तभी काम करते हैं जब जावा, एनपीएम, पीएचपी आदि जैसे अन्य पैकेज पहले स्थापित किए गए थे।

4. निष्पादित करने के लिए फ़ाइल की निर्देशिका PATH में बिल्कुल नहीं है।

विंडोज कंट्रोल पैनल में खोलें सिस्टम सेटिंग्स विंडो, बाईं ओर उन्नत सिस्टम सेटिंग्स पर क्लिक करें, बटन पर्यावरण चर पर क्लिक करें और Path और उनके मूल्यों के लिए दोनों सूचियों में देखें। डिफ़ॉल्ट रूप से Path केवल सिस्टम चर की सूची में मौजूद है।

5. सिस्टम या उपयोगकर्ता PATH संशोधन के बाद एक चल रही प्रक्रिया / आवेदन को फिर से शुरू नहीं किया गया था

कमांड setx साथ या नियंत्रण कक्ष के माध्यम से सिस्टम PATH या उपयोगकर्ता PATH का एक संशोधन - सिस्टम - उन्नत सिस्टम सेटिंग्स उपयोगकर्ता या एक इंस्टॉलर द्वारा बनाई गई थी, लेकिन एक पहले से चल रही प्रक्रिया / एक खुली कमांड प्रॉम्प्ट या PowerShell विंडो की तरह आवेदन बंद या बाहर नहीं किया गया था। और PATH संशोधन के बाद खोला / पुनः आरंभ किया गया। यह आवश्यक है जैसा कि नीचे अध्याय एफ में विस्तार से वर्णित है।

6. 64 बिट विंडोज पर %SystemRoot%\System32 में एक निष्पादन योग्य नहीं पाया जाता है।

64 बिट निष्पादक और %SystemRoot%\SysWOW64 साथ 64 बिट विंडोज पर 32 बिट निष्पादक के साथ निर्देशिका %SystemRoot%\System32 । अधिकांश निष्पादनयोग्य दोनों निर्देशिकाओं में मौजूद हैं। लेकिन कुछ निष्पादक केवल System32 और कुछ केवल SysWOW64

सिस्टम PATH में पहले फ़ोल्डर पथ %SystemRoot%\System32 रूप में डिफ़ॉल्ट रूप से समाहित है। लेकिन दो सिस्टम फ़ोल्डरों में से एक को पथ के बिना निर्दिष्ट निष्पादन योग्य के लिए खोजा जाता है या पथ %SystemRoot%\System32 निष्पादन वातावरण पर निर्भर करता है। 64 बिट वातावरण में निष्पादित एक एप्लिकेशन या स्क्रिप्ट वास्तव में %SystemRoot%\System32 तक पहुंच रही है, जबकि 32 बिट वातावरण में निष्पादित एक एप्लिकेशन या स्क्रिप्ट को विंडोज फाइल सिस्टम द्वारा डायरेक्टरी %SystemRoot%\SysWOW64 पुनर्निर्देशित किया जाता है।

32 बिट वातावरण में चलने वाला एप्लिकेशन या स्क्रिप्ट जो %SystemRoot%\System32 में 64 बिट निष्पादन योग्य चलाना चाहता है, फ़ाइल पथ %SystemRoot%\Sysnative साथ निष्पादन योग्य की पूर्ण योग्य फ़ाइल नाम का उपयोग %SystemRoot%\Sysnative

नोट: %SystemRoot%\Sysnative न तो निर्देशिका है और न ही किसी प्रकार का लिंक। यह केवल x86 अनुप्रयोगों के लिए कुछ बहुत खास है। यह amd64 अनुप्रयोगों के लिए मौजूद नहीं है। if exist %SystemRoot%\Sysnative किसी बैच फ़ाइल में if exist %SystemRoot%\Sysnative\cmd.exe , if exist %SystemRoot%\Sysnative\cmd.exe स्थिति दोनों परिवेशों में हमेशा गलत होती है, लेकिन if exist %SystemRoot%\Sysnative\cmd.exe मौजूद है, तो 32 बिट निष्पादन परिवेश में और 64 बिट वातावरण में और 32 बिट में भी सही है। विंडोज। इस स्थिति का उपयोग बैच स्क्रिप्ट में किया जा सकता है ताकि पता लगाया जा सके कि 64 बिट विंडोज पर %SystemRoot%\SysWOW64 में बैच फ़ाइल को 32 बिट cmd.exe द्वारा संसाधित किया गया है जो कि कार्य के आधार पर जानना महत्वपूर्ण हो सकता है।

WOW64 द्वारा प्रभावित Microsoft दस्तावेज़ WOW64 कार्यान्वयन विवरण और रजिस्ट्री कुंजी भी देखें।

7. LOCAL वैरिएबल PATH को कमांड लाइन या बैच फ़ाइल में पहले संशोधित किया गया था।

कमांड लाइन पर set path चलाएं या कमांड लाइन के ऊपर बैच फ़ाइल में इस कमांड को जोड़ें जो पर्यावरण चर PATH और PATHEXT के वर्तमान मूल्यों को देखने में विफल रहता है।

अंतिम कारण बाहरी कमांड के लिए जिम्मेदार है बैच फ़ाइल के निष्पादन पर नहीं पाया जा रहा है जिसमें set path=... से कहीं ऊपर है।

ई) इस त्रुटि संदेश से कैसे बचें?

बेस्ट PATH और PATHEXT पर स्वतंत्र होने के लिए एक बैच फ़ाइल को कोड कर रहा है और PATH में निर्देशिकाओं का क्रम है जिसका अर्थ है कमांड लाइन का उपयोग करना।

FOR /f "delims=" %%d in ('dir /s /b /ad ^| %SystemRoot%\System32\sort.exe /r') do rd "%%d"

कोई भी बाहरी कमांड जिसका निष्पादन योग्य %SystemRoot%\System32 में संग्रहीत है उसे इस पथ के साथ और फ़ाइल एक्सटेंशन .exe साथ बैच फ़ाइल में निर्दिष्ट किया जाना चाहिए। तब Windows कमांड दुभाषिया को स्थानीय PATH और PATH का उपयोग करके एक फ़ाइल की खोज करने की आवश्यकता नहीं होती है और बैच फ़ाइल हमेशा काम करती है (जब तक कि पर्यावरण चर SystemRoot बैच फ़ाइल में संशोधित नहीं होता है जो मैंने कभी नहीं देखा है)।

एफ) जब एक प्रणाली या उपयोगकर्ता PATH परिवर्तन प्रक्रियाओं पर लागू होता है?

जब कोई उपयोगकर्ता विंडोज स्टार्ट मेनू के माध्यम से या विंडोज एक्सप्लोरर विंडो के माध्यम से एक कमांड प्रॉम्प्ट विंडो खोलता है, तो उपयोगकर्ता कमांड को खत्म करने के लिए विकल्प का उपयोग करके cmd.exe शुरू करता है /K कमांड विंडो को खोलने के बाद कंसोल विंडो को खुला रखने के लिए जो एक बैच फ़ाइल को डीबग करने के लिए अच्छा है। ।

जब Windows एक्सप्लोरर में एक बैच फ़ाइल को दोगुना किया जाता है, तो उपयोगकर्ता बैच कोड को संसाधित करने के लिए cmd.exe शुरू करता है, जिसमें बैच का उपयोग समाप्त करने के बाद कंसोल विंडो को बंद करने के विकल्प /C का उपयोग किया जाता है, जो बैच फ़ाइल को डीबग करने के लिए अच्छा नहीं है क्योंकि त्रुटि संदेश नहीं हो सकता है। इस मामले में देखा जा सकता है।

दोनों ही मामलों में विंडोज़, cmd.exe शुरू होने वाले एप्लिकेशन के पर्यावरण चर की एक प्रति बनाता है जो आमतौर पर विंडोज एक्सप्लोरर है। इसलिए शुरू की गई कमांड प्रक्रिया में एक स्थानीय PATH जिसका मान वैसा ही होता है जैसा कि मूल प्रक्रिया cmd.exe को शुरू करने पर होता था।

उदाहरण:

  1. एक कमांड प्रॉम्प्ट विंडो खोलें, title Process1 रन करें और set path चलाएँ।
    आउटपुट PATH और PATHEXT जैसा कि वर्तमान में कंसोल विंडो में वर्तमान उपयोगकर्ता खाते के लिए परिभाषित है, जिसमें अब विंडो टाइटल Process1 है

  2. set PATH=%SystemRoot%\System32 और अगले एक बार फिर से set path
    आउटपुट फिर से PATH और PATHEXT , लेकिन PATH साथ अब केवल एक निर्देशिका है।

  3. start "Process2" और विंडो कंसोल के साथ नए कंसोल विंडो में चलाएं प्रोसेस 2 कमांड set path
    आउटपुट PATH और PATHEXT समान मूल्यों के साथ है जैसा कि प्रोसेस 1 में है
    यह प्रदर्शित करता है कि एक नई प्रक्रिया शुरू करने पर चालू प्रक्रिया के मौजूदा पर्यावरण चर की प्रतिलिपि बनाई जाती है और न कि केवल विंडोज जो वर्तमान में विंडोज रजिस्ट्री में संग्रहीत है।

  4. प्रक्रिया 2 में चलाएँ कमांड set PATH= और अगला set path
    आउटपुट केवल PATHEXT क्योंकि प्रक्रिया 2 के लिए अब स्थानीय PATH मौजूद नहीं है।
    यह प्रदर्शित करता है कि हर प्रक्रिया अपने पर्यावरण चर को पूर्ण विलोपन सहित संशोधित कर सकती है।

  5. Process1 विंडो पर स्विच करें, कमांड set PATH=%PATH%;%SystemRoot% और अगला set path चलाएँ।
    आउटपुट दो निर्देशिकाओं और PATHEXT साथ PATH

  6. कमांड start "Process3" रन करें और ओपन विंडो में टाइटल प्रोसी 3 के साथ कमांड set path
    आउटपुट PATH जो दो निर्देशिकाओं के साथ है जैसा कि Process1 और PATHEXT लिए भी परिभाषित किया गया है।

  7. प्रक्रिया 3 में चलाएँ कमांड set PATH=%SystemRoot%\System32

जब %SystemRoot% C:\Windows फैलता है, तो स्थानीय PATH लिए निम्नलिखित मानों के साथ 3 कमांड प्रक्रियाएं चल रही हैं:

प्रक्रिया 1 : PATH=C:\Windows\System32;C:\Windows
प्रक्रिया 2 : PATH बिल्कुल मौजूद नहीं है।
प्रक्रिया 3 : PATH=C:\Windows\System32

तो अब कंट्रोल पैनल - सिस्टम - एडवांस्ड सिस्टम सेटिंग्स - एनवायरमेंट वेरिएबल्स और यूजर वैरिएबल्स की सूची में शामिल होने से क्या होता है नए पर्यावरण वैरिएबल PATH को C:\Temp साथ जोड़ा जाता है, या पहले से ही एक यूजर PATH एनवायरनमेंट वैरिएबल, एडिट PATH और परिशिष्ट ;C:\Temp मान के लिए?

खैर, जब तक टाइटल एनवायरनमेंट वेरिएबल्स के साथ डायलॉग विंडो दो सूचियों को दिखाती है, तब तक वेरिएबल को संशोधित करने पर कुछ भी नहीं होता है, जब तक कि बटन ओके पर क्लिक नहीं किया जाता है, विंडोज रजिस्ट्री में सभी बदलावों को लेने और विंडो को बंद करने के लिए।

चलिए 3 रनिंग कमांड प्रॉसेस पर वापस जाते हैं और प्रोसेस 1 , प्रॉसेस 2 और प्रॉसेस 3 कमांड set path । इसे देखा जा सकता है:

प्रक्रिया 1 : PATH=C:\Windows\System32;C:\Windows
प्रक्रिया 2 : PATH बिल्कुल मौजूद नहीं है।
प्रक्रिया 3 : PATH=C:\Windows\System32

पहले से चल रही प्रक्रियाओं में कुछ नहीं बदला।

कोई प्रक्रिया किसी चल रही प्रक्रिया के पर्यावरण चर को संशोधित नहीं कर सकती है।

विंडोज स्टार्ट मेनू से खोलें एक और कमांड प्रॉम्प्ट विंडो और चौथे कमांड प्रोसेस में चलाएं कमांड set path । यह देखा जा सकता है कि चौथी कमांड प्रक्रिया के स्थानीय PATH ने निर्देशिका C:\Temp अब जोड़ दिया है।

फिर सभी 4 कमांड प्रक्रियाओं को बंद करें और हटाए गए उपयोगकर्ता PATH क्रमशः हटाएं ;C:\Temp यदि इस निर्देशिका पथ को पहले जोड़ा गया हो तो ;C:\Temp उपयोगकर्ता PATH से हटा दें।

यह कैसे संभव है यदि कोई प्रक्रिया पहले से चल रही प्रक्रिया के पर्यावरण चर को संशोधित नहीं कर सकती है?

बटन के साथ पर्यावरण चर विंडो बंद करने पर विंडोज डेस्कटॉप के रूप में चल रहे विंडोज एक्सप्लोरर उदाहरण के पर्यावरण चर सूची को कैसे ठीक किया गया था ?

उन दो सवालों के जवाब eryksun ने अपनी टिप्पणी में दिए थे।

एनवायरनमेंट वेरिएबल्स विंडो के बटन ओके पर क्लिक करने पर सिस्टम और यूजर वेरिएबल्स में संशोधन पर रजिस्ट्री में लिखने के बाद, विंडोज सभी टॉप-लेवल विंडो के लिए WM_SETTINGCHANGE संदेश भेजता है WM_SETTINGCHANGE रनिंग एप्लिकेशन को सिस्टम में बदलाव के बारे में सूचित किया जा सके।

यदि यह ईवेंट संदेश बिल्कुल और कैसे हैंडल किया जाता है, तो यह एप्लिकेशन पर निर्भर है। विंडोज डेस्कटॉप के रूप में चल रहे विंडोज एक्सप्लोरर रजिस्ट्री से पर्यावरण चर पढ़ता है और तदनुसार अपने पर्यावरण चर सूची को अद्यतन करता है। कुल कमांडर जैसे अन्य एप्लिकेशन भी इस संदेश को संभालते हैं और पर्यावरण चर की अपनी सूची भी अपडेट करते हैं। लेकिन cmd.exe ऐसा सौभाग्य से नहीं करता है क्योंकि यह वास्तव में समस्याग्रस्त होगा।

क्या कमांड प्रॉम्प्ट विंडो या बैच फ़ाइल के भीतर से WM_SETTINGCHANGE माध्यम से अधिसूचना के साथ सिस्टम या उपयोगकर्ता चर को संशोधित करने की कोई संभावना है?

reg add कमांड का उपयोग करके पर्यावरण चर के रजिस्ट्री मान को संशोधित करना संभव है। लेकिन इससे सभी शीर्ष-स्तरीय विंडो में WM_SETTINGCHANGE संदेश भेजने का परिणाम नहीं होता है। reg add या regedit साथ किए गए इस तरह के बदलावों को विंडोज (या कम से कम एक लॉग ऑफ और वर्तमान उपयोगकर्ता पर लॉग इन) को फिर से ध्यान में रखने की आवश्यकता होती है।

लेकिन कमांड setx भी है जो एक सिस्टम या उपयोगकर्ता चर को संशोधित करने के लिए डिज़ाइन किया गया है और जो निर्दिष्ट तर्कों के अनुसार रजिस्ट्री के अपडेट होने के बाद सभी शीर्ष-स्तरीय खिड़कियों पर WM_SETTINGCHANGE संदेश भेजता है। भागो setx /? विवरण के लिए एक कमांड प्रॉम्प्ट विंडो में। लेकिन कृपया ध्यान setx कि setx कमांड प्रॉसेस के स्थानीय पर्यावरण चर को संशोधित नहीं करता है। यह setx अलावा उपयोग set जाने वाले कमांड set का उपयोग करके किया जाना चाहिए।

जी) पर्यावरण चर कैसे विंडोज द्वारा नियंत्रित किया जाता है?

फ़ाइल चर की सूची के साथ पर्यावरण चर PATH पर्यावरण चर PATH तुलना में विंडोज अलग-अलग द्वारा नियंत्रित किया जाता है।

सिस्टम PATHEXT और उपयोगकर्ता PATHEXT को स्थानीय PATHEXT नहीं किया जाता है।

एक उपयोगकर्ता PATHEXT परिभाषित करता है कि एक उपयोगकर्ता PATHEXT परिभाषित खाते के पर्यावरण के तहत चल रही सभी प्रक्रियाओं के लिए सिस्टम PATHEXT को बदल देता है।

डिफ़ॉल्ट रूप से केवल एक सिस्टम PATHEXT पर्यावरण चर परिभाषित किया गया है।

एच) क्या वर्तमान निर्देशिका में फ़ाइल खोज को अक्षम करना संभव है?

विंडोज कमांड प्रोसेसर वर्तमान निर्देशिका में डिफ़ॉल्ट रूप से खोज करता है यदि स्क्रिप्ट फ़ाइल या निष्पादन योग्य का फ़ाइल नाम कमांड लाइन पर या बिना किसी पथ के बैच फ़ाइल में निर्दिष्ट किया जाता है, जिसका अर्थ बिना बैकस्लैश \ (या फॉरवर्ड स्लैश / ऑटो-सुधार के लिए धन्यवाद) के बिना है तर्क स्ट्रिंग।

लेकिन विंडोज विस्टा और बाद में विंडोज क्लाइंट वर्जन और विंडोज सर्वर 2003 और बाद में विंडोज सर्वर वर्जन पर कम से कम रिलेटिव पाथ के बिना निर्दिष्ट करंट डाइरेक्टरी में स्क्रिप्ट / NoDefaultCurrentDirectoryInExePath करना NoDefaultCurrentDirectoryInExePath करना NoDefaultCurrentDirectoryInExePath .\ NoDefaultCurrentDirectoryInExePath पर्यावरण चर NoDefaultCurrentDirectoryInExePath को परिभाषित करके .\ मूल्य के रूप में eryksun द्वारा लिखित अपनी टिप्पणी में और समारोह के बारे में Microsoft के प्रलेखन द्वारा समझाया गया है NeedCurrentDirectoryForExePathA

इस पर्यावरण चर के उपयोग के बारे में अधिक जानकारी के लिए वर्तमान कार्य निर्देशिका को पथ से हटाना देखें।


शायद, आपने PATH चर के साथ गड़बड़ कर दी। शायद आप इसे अपनी स्क्रिप्ट में कहीं और लिख रहे हैं। चूंकि sort एक बाहरी कमांड है, जो आपकी कमांड लाइन के अन्य सभी के विपरीत है जैसे for , dir , rd , जो cmd -internal कमांड हैं, कमांड को खोजने के लिए PATH वेरिएबल की आवश्यकता होती है। यदि PATH को परिभाषित नहीं किया जाता है, तो बाहरी कमांड को केवल वर्तमान कार्य निर्देशिका में खोजा जाता है। एक PATHEXT वैरिएबल भी है जो एक्जीक्यूटिव, जैसे .com , .exe लिए मानक फ़ाइल एक्सटेंशन को परिभाषित करने के लिए आवश्यक है। इसलिए जब sort कमांड प्रॉम्प्ट या बैच फ़ाइल में दिखाई देता है, तो सिस्टम मौजूदा वर्किंग डायरेक्टरी और PATH वैरिएबल द्वारा निर्दिष्ट सभी निर्देशिकाओं को बेस नाम sort और PATHEXT द्वारा निर्दिष्ट एक्सटेंशन में से एक के लिए PATHEXT । कमांड sort को वास्तव में sort.exe कहा जाता है और आमतौर पर C:\Windows\System32 में स्थित होता C:\Windows\System32








cmd