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


41

विंडोज 10 पर, मेरे पास truffle.jsमेरे वर्तमान फ़ोल्डर में एक फ़ाइल है । मैं trufflecmd विंडो में लिखता हूं , उस truffleकार्यक्रम को लागू करने की अपेक्षा करता हूं जो मेरे पथ पर कहीं और रहता है।

इसके बजाय, truffle.jsमेरी पसंदीदा आईडीई में खोला गया है ( .jsफाइलें उस आईडीई से जुड़ी हैं)। मुझे लगा कि यह व्यवहार केवल निष्पादन योग्य फ़ाइलों के लिए है .bat, .comऔर .exe। यह एक .jsफ़ाइल के लिए क्यों होता है ?

नोट: मुझे बाद में पता चला कि मेरे पास truffleमेरे रास्ते पर कोई भी स्थापित नहीं है , लेकिन मेरा सवाल यह है: विंडोज एक्सटेंशन को क्यों पूरा कर रहा है जिसे मैंने गैर-निष्पादन योग्य फ़ाइल पर निर्दिष्ट नहीं किया था?

ट्रफल स्थापित करने और cmd को पुनरारंभ करने के बाद भी, मुझे उस फ़ोल्डर में चलाने के लिए असली ट्रफल नहीं मिल सकता है जिसमें एक फ़ाइल है truffle.js




क्योंकि विंडोज किसी भी फाइल को एक्सटेंशन के साथ खोलेगा जिसमें संबंधित एप्लिकेशन है। यह आपको c:\path\application.exe c:\path\filename.extबस के बजाय टाइप करने से बचा रहा है filename
अशलीगव

जवाबों:


75

क्योंकि डिफ़ॉल्ट रूप %PATHEXT%से सेट है .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC। ध्यान दें कि यह कैसे होता है .js

इसका मतलब है कि यदि आप एक नाम टाइप करते हैं, तो सीएमडी मौजूदा फ़ोल्डर में, उस क्रम में संलग्न इन एक्सटेंशन वाली फाइलों की तलाश करेगा। उसके बाद ही यह विचार किया जाएगा कि क्या है %PATH%। इस व्यवहार को बदला नहीं जा सकता। आप %PATHEXT%किसी भी अन्य पर्यावरण चर की तरह हालांकि संशोधित कर सकते हैं ।

आप WHEREकमांड का उपयोग यह जांचने के लिए कर सकते हैं कि कौन सा रास्ता खोला जाएगा (जैसे where truffle), जो स्वचालित रूप से% PATH% और% PATHEXT% दोनों की खोज करेगा उसी तरह CMD होगा।


3
स्पष्ट करने के लिए, आपका मतलब है कि विंडोज़ एक इनपुट लेगी, इनपुट में उन फ़ाइल एक्सटेंशनों को जोड़कर देखें कि क्या यह मेल खाता है, PATH में देखने से पहले।
टैंकरस्मैश

9
यह भी ध्यान दें कि ओपी का मूल तर्क है - ये सभी निष्पादन योग्य हैं (शब्द के कुछ अर्थों में ...), उनमें से कुछ सिर्फ मानव पठनीय होने के लिए भी होते हैं।
एडोनेलियम

2
@TankorSmash विंडोज, जैसा कि CreateProcessऔर मुझे लगता है कि ShellExecute(Ex)एपीआई भी , PATHEXT को नहीं देखता है। विस्तार खोज केवल डिफ़ॉल्ट गोले (cmd.exe और powershell.exe) के भीतर लागू की जाती है। उस ने कहा, CreateProcessऔर विशेष रूप ShellExecute(Ex) से जोड़ देगा.exe
बॉब

3
@ hBy2Py यदि किसी हमलावर के पास आपके सिस्टम पर एक फ़ाइल लगाने और उसे निष्पादित करने के लिए पर्याप्त पहुंच है, तो आप पहले से ही खराब हो चुके हैं, कोई फर्क नहीं पड़ता है फ़ाइल एक्सटेंशन या %PATHEXT%पर्यावरण चर का मूल्य ।
जकिनस्टर

2
@ JustinC.B। सेब और संतरे। नोटपैड ++ एक Microsoft उत्पाद नहीं है (और विंडोज, आदि के साथ बंडल नहीं है)। एक तरफ नामकरण, यह नोटपैड के लिए प्रतिस्थापन के बहुत (या थोड़ा) है जैसा कि उदात्त पाठ या यहां तक ​​कि VSCode हैं। दूसरी ओर, PowerShell के पास प्रथम-पक्ष का समर्थन है और यह तेजी से विरासत कमांड प्रॉम्प्ट पर (बंडल किया गया) डिफ़ॉल्ट हो रहा है, और पिछले कुछ वर्षों में पेश किए गए अधिकांश नए आदेश PowerShell-only हैं।
Bob
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.