दिलचस्प पोस्ट
वेबव्यू में यूट्यूब वीडियो खेलते हैं REST वेब सेवा से क्लाइंट को फाइल भेजने का सही तरीका क्या है? पायथन में बड़ी फ़ाइल से एक पंक्ति को हटाने का सबसे तेज़ तरीका क्लाइंट द्वारा भेजा गया अनुरोध वाक्यविन्यास गलत था.-स्प्रिंग एमवीसी + जेडीबीसी टेम्पलेट XSD फ़ाइल का उपयोग कर XML फ़ाइल जनरेट कर रहा है मर्जेशोर्ट पायथन जावा में सी # अनाम तरीकों के बराबर? Django को देखने के लिए स्थिर फ़ाइलें यूआरएल मिलता है Xcode 8 बीटा 4 स्विफ्ट 3 – "गोल" व्यवहार बदल गया है हटाए जाने के बाद SQL सर्वर में ऑटोइंचर रीसेट करें @ यूआरएल के माध्यम से नामांकित बीन सीडीआई पर पैरामीटर पास करने के लिए @ <F: मेटाडाटा>, <f: viewParam> और <f: viewAction> के लिए क्या इस्तेमाल किया जा सकता है? jQuery – तत्व की चौड़ाई प्राप्त करें जब दृश्यमान नहीं होता है (प्रदर्शन: कोई नहीं) JQuery और regex का उपयोग करके ईमेल पते की पुष्टि करना HTML इनपुट टैग समस्या को बंद करना

'…' का कारण आंतरिक या बाहरी कमांड, ऑपरेटिव प्रोग्राम या बैच फ़ाइल के रूप में क्यों नहीं माना जाता है?

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

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

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"

… यह मानक त्रुटि फेंकता है: Sort is not recognised as an internal or external command...

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

क्या कोई मदद कर सकता है? अग्रिम धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं।

Solutions Collecting From Web of "'…' का कारण आंतरिक या बाहरी कमांड, ऑपरेटिव प्रोग्राम या बैच फ़ाइल के रूप में क्यों नहीं माना जाता है?"

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

विंडोज़ कमांड इंटरप्रीटर के लिए कमान के लिए एक COMMAND की खोज करता है

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

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

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

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

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


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

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

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

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

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

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

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

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

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


सी) त्रुटि संदेश क्या मतलब है?

त्रुटि संदेश

'…' एक आंतरिक या बाहरी कमान के रूप में मान्यता प्राप्त नहीं है,
ऑपरेटिव प्रोग्राम या बैच फ़ाइल

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

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

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

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

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


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

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

1. निष्पादित करने के लिए फ़ाइल का फ़ाइल नाम टाइपिंग त्रुटि के कारण गलत निर्दिष्ट किया गया था।

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

2. मौजूदा निर्देशिका निष्पादित करने के लिए फ़ाइल युक्त निर्देशिका से अलग है।

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

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

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

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

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

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


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

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

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

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


एफ) जब एक सिस्टम या उपयोगकर्ता पाथ परिवर्तन प्रक्रियाओं पर लागू होता है?

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

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

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

उदाहरण:

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

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

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

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

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

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

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

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

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

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

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

चलिए चलते हुए कमांड प्रक्रियाओं पर वापस जाते हैं और Process1 , Process2 और Process3 कमांड set path । इसे देखा जा सकता है:

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

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

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

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

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

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

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

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

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

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

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

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

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

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