2012-06-19 20 views
15

मैंने नाम में किसी संख्या के साथ फ़ाइल की तलाश करते समय इसे दुर्घटना से काफी खोज लिया। जब मैं टाइप करें:अजीब विंडोज डीआईआर कमांड व्यवहार

dir*संख्या*

cmd.exe (जहां संख्या 0 से 9 तक और तारक और संख्या के बीच कोई रिक्त स्थान के साथ किसी भी संख्या का प्रतिनिधित्व करता) कमांड प्रॉम्प्ट, यह विभिन्न मानदंडों को लौटाता है जो खोज मानदंडों को फिट करने के लिए किसी में प्रकट नहीं होते हैं। अजीब बात यह है कि निर्देशिका के आधार पर, कुछ संख्याएं काम करती हैं और दूसरों को नहीं। एक उदाहरण, एक वेबसाइट के साथ जुड़े एक निर्देशिका में, मैं निम्न लिखें जाता है:

dir *4* 

और क्या दिया जाता है है:

 
Directory of C:\Ampps\www\includes\pages 

04/30/2012 03:55 PM    153 inventory_list_retrieve.php 
06/18/2012 11:17 AM    6,756 ix.html 
06/19/2012 01:47 PM   257,501 jquery.1.7.1.js 
       3 File(s)  264,410 bytes 
       0 Dir(s) 362,280,906,752 bytes free 

कि सिर्फ मेरे लिए कोई मतलब नहीं है। कोई सुराग?

प्रश्न स्टैक ओवरफ्लो पर लिखा गया है क्योंकि डीआईआर कमांड अक्सर बैच कार्यक्रमों में फॉर के साथ संयुक्त होता है। अजीब डीआईआर व्यवहार बैच प्रोग्राम संभावित रूप से अविश्वसनीय रूप से अविश्वसनीय लगता है अगर वे डीआईआर कमांड का उपयोग करते हैं।

संपादित करें: (अतिरिक्त नोट)। हालांकि काफी समय बीत चुका है, मैंने इस के साथ एक और quirk खोजा है कि लगभग मुझे बहुत काम किया। मैं एक विशेष निर्देशिका पेड़ में सभी .htm फ़ाइलों को हटाना चाहता था। मुझे ऐसा करने से पहले एहसास हुआ कि *.htm मैचों .html फाइलें भी मेल खाते हैं। इसके अलावा, *.man मैचों , और शायद अन्य लोग हैं। उस विशेष निर्देशिका में सभी .html फ़ाइलों को हटाने से कम से कम कहने में परेशानी होगी।

+1

दिलचस्प! हमें इस मामले के बारे में कुछ परीक्षण करने की जरूरत है ... – Aacini

+0

वाह, इन सभी वर्षों के बाद - अभी भी इस तकनीक से आश्चर्यचकित है। मैं उस अजीब व्यवहार की पुष्टि कर सकता हूं। – Helbreder

+0

http://superuser.com/questions/336358/is-it-a-good-idea-to-disable-short-filenames-on-windows-7-running-on-a-ssd-drive –

उत्तर

14

जंगली कार्ड दोनों बड़े फ़ाइल नाम और कम के खिलाफ मिलान किया जाता है "8.3" नाम अगर एक मौजूद है । यह आश्चर्य पैदा कर सकता है।

छोटे नाम देखने के लिए, विकल्प DIR कमांड का उपयोग करें।

ध्यान दें कि यह व्यवहार किसी भी तरह से DIR कमांड के लिए विशिष्ट नहीं है, और किसी अन्य आदेश पर अपेक्षित अपेक्षा से अधिक (अक्सर अप्रिय) आश्चर्य हो सकता है, जैसे कि DEL

* निक्स शैल के विपरीत, मिलान नामों की सूची के साथ फ़ाइल पैटर्न का प्रतिस्थापन प्रत्येक कमांड के भीतर लागू किया जाता है और खोल द्वारा लागू नहीं किया जाता है। इसका मतलब यह हो सकता है कि विभिन्न आदेश विभिन्न जंगली कार्ड पैटर्न नियमों को लागू कर सकते हैं, लेकिन व्यावहारिक रूप से यह बहुत दुर्लभ है क्योंकि विंडोज़ एपीआई कॉल को उन फाइलों के लिए निर्देशिका खोजने के लिए प्रदान करता है जो पैटर्न से मेल खाते हैं और अधिकांश प्रोग्राम स्पष्ट रूप से उन कॉल का उपयोग करते हैं। "सामान्य" टूल का उपयोग करके सी या सी ++ में लिखे गए कार्यक्रमों के लिए, यह विस्तार विंडोज एपीआई का उपयोग करते हुए सी रनटाइम लाइब्रेरी द्वारा "मुफ्त में" प्रदान किया जाता है।

विंडोज प्रश्न में एपीआई FindFirstFile()FindNextFile(), और FindClose() है और इसके करीबी रिश्तेदार FindFirstFileEx(),।

अजीब तरह, हालांकि FindFirstFile() के लिए दस्तावेज़ के रूप में अपनी lpFileName पैरामीटर का वर्णन "निर्देशिका या पथ, और फ़ाइल नाम है, जो, वाइल्डकार्ड वर्ण शामिल कर सकते हैं उदाहरण के लिए, तारांकित (*) या एक प्रश्न चिह्न (?)" यह कभी नहीं वास्तव में परिभाषित करता है कि * और ? वर्णों का क्या अर्थ है।

फ़ाइल पैटर्न का सटीक अर्थ CP/M प्रारंभिक प्रणाली में 1 9 70 के दशक से शुरू होने वाले ऑपरेटिंग सिस्टम का इतिहास है जो दृढ़ता से प्रभावित होता है (कुछ कह सकते हैं कि "प्रभावित" जगह "एमएसडीओएस के डिजाइन में" सीधे "कॉपी किया गया था"। इसके परिणामस्वरूप कई "रोचक" कलाकृतियों और व्यवहार हुए हैं। स्पेक्ट्रम के डॉस एंड पर इनमें से कुछ को 2007 से this blog post पर वर्णित किया गया है जहां रेमंड ने वर्णन किया है कि डॉस में फ़ाइल पैटर कैसे कार्यान्वित किए गए थे।

11

हाँ। आपको लगता है कि यह भी कम नाम माध्यम से खोज करता दिखाई देगा, जब कोशिश यह:

dir /x *4* 

(/ एक्स स्विच लघु नाम के लिए है)

छानने फ़ाइल नाम के लिए

का उपयोग करें:

dir /b | find "4" 
+1

यदि आप केवल लंबे नामों में केवल एक खोज चाहते हैं। – npocmaka

+1

+1 ढूंढें, हां, "छिपा" लघु फ़ाइल नाम उन समस्याओं का कारण बन सकता है जो स्पष्ट नहीं हैं। FIND का उपयोग करने के सुझाव को काम करना चाहिए: 'dir/b | "4" 'ढूंढें। इसके बजाय FINDSTR का उपयोग नियमित अभिव्यक्तियों के माध्यम से अधिक चुनिंदा फ़िल्टरिंग की अनुमति देगा। – dbenham

3

लगता है जैसे डीआईआर कमांड खोजों को हुड के नीचे भी लघु (8.3 तरीके) फ़ाइल नामों की खोज करता है।

Volume in drive C is System 
Volume Serial Number is F061-0B78 

Directory of C:\Users\Piotrek\Desktop\Downloads 
2012-05-20 17:33  23 639 040 gDEBugger-5_8.msi 
2012-05-20 17:30   761 942 glew-1.7.0.zip 
2012-05-20 17:11   9 330 176 irfanview_plugins_433_setup.exe 
2012-05-24 20:17   4 419 192 SumatraPDF-2.1.1-install.exe 
2012-05-15 22:55   3 466 248 TrueCrypt Setup 7.1a.exe 
       5 File(s) 1 127 302 494 bytes 

सूचीबद्ध हैं, जो जाहिरा तौर पर यह किसी भी 1 चरित्र नहीं है के बीच एक gDEBugger-5_8.msi फ़ाइल नहीं है:

जब मैं dir *1* फोन इस मैं क्या मिलता है।

जब मैं /X का उपयोग डीआईआर कमांड के साथ स्विच करता हूं, तो सबकुछ स्पष्ट हो जाता है, जिससे डीआईआर 8.3 फ़ाइल नामों का उपयोग करता है।एक dir /X *1* आदेश से आउटपुट: dir की मदद से

Volume in drive C is System 
Volume Serial Number is F061-0B78 

Directory of C:\Users\Piotrek\Desktop\Downloads 


2012-05-20 17:33  23 639 040 GDEBUG~1.MSI gDEBugger-5_8.msi 
2012-05-20 17:30   761 942 GLEW-1~1.ZIP glew-1.7.0.zip 
2012-05-20 17:11   9 330 176 IRFANV~1.EXE irfanview_plugins_433_setup.exe 
2012-05-24 20:17   4 419 192 SUMATR~1.EXE SumatraPDF-2.1.1-install.exe 
2012-05-15 22:55   3 466 248 TRUECR~1.EXE TrueCrypt Setup 7.1a.exe 
       5 File(s) 1 127 302 494 bytes 

उद्धरण: कमांड प्रॉम्प्ट पर

/X   This displays the short names generated for non-8dot3 file 
      names. The format is that of /N with the short name inserted 
      before the long name. If no short name is present, blanks are 
      displayed in its place. 
4

RBerteig के जवाब से एक उद्धरण:

ध्यान दें कि यह व्यवहार किसी भी तरह से DIR आदेश, के लिए विशिष्ट नहीं है और अन्य (अक्सर अप्रिय) को जन्म दे सकता आश्चर्य जब एक वाइल्ड कार्ड मैचों की तुलना में अधिक किसी भी कमांड पर उम्मीद है, जैसे कि DEL।

उपरोक्त फोर कमांड के लिए भी सत्य है, जो बहुत बुरा है।

for %A in (*4*) do @echo %A contains a 4 

छोटे नाम भी खोजेगा। फिर से समाधान को अधिक विश्वसनीय तरीके से नामों को फ़िल्टर करने के लिए FIND या FINDSTR का उपयोग करना होगा।

for %A in (*) do @echo %A | >nul findstr 4 && echo %A contains a 4 

नोट - परिवर्तन% एक को %% एक अगर एक बैच फ़ाइल के भीतर आदेश का उपयोग।

FINDSTR के साथ संयोजन कम फ़ाइल नामों के साथ समस्याओं में चलने वाले किसी भी कमांड का सुरक्षित रूप से उपयोग करने के लिए एक सामान्य उद्देश्य विधि हो सकता है। बस ECHO को समस्या कमांड जैसे COPY या DEL के साथ प्रतिस्थापित करें।