एक ही एक्सटेंशन के साथ फ़ाइलों को अलग-अलग तरीके से व्यवहार करने के लिए विंडोज प्राप्त करें


10

एकाधिक प्रोग्राम एक ही फ़ाइल एक्सटेंशन का उपयोग करते हैं, लेकिन प्रारूप पूरी तरह से अलग और असंगत हैं। उदाहरण के लिए, मेरे पास .schमेरे कंप्यूटर पर फाइलें हैं जो कम से कम 5 अलग-अलग प्रारूपों (टीना, पीएसपीईएस, पैड्स, प्रोटेल और ईगल) में हैं। क्या उन्हें अलग तरह से व्यवहार करने के लिए विंडोज प्राप्त करने का एक तरीका है, ताकि इस तरह की फ़ाइल पर डबल-क्लिक करने से यह उस प्रोग्राम में खुल जाए जो इसे खोलने के लिए है?

लिनक्स फाइलों में अंतर करने के लिए मैजिक नंबरों का उपयोग करता है , और केवल फाइल एक्सटेंशन का उपयोग करता है। (सभी PNG फाइलें बाइट्स के साथ शुरू होती हैं 89 50 4E 47 0D 0A 1A 0A , उदाहरण के लिए, चाहे आप उनका नाम कुछ भी हो।) यह अच्छा होगा यदि विंडोज इस का समर्थन कर सकता है, लेकिन शायद इसे लागू करना बहुत मुश्किल है। शायद दूसरे स्तर के विस्तार की तरह कुछ सरल, जैसे filename.program1.schऔर filename.program2.sch? शायद मक्खी पर फ़ाइलों का नाम बदलने वाले किसी प्रकार का फ़िल्टर?

बेहतर विचार: पूर्व-प्रोसेसर (.bat फ़ाइल या समर्पित ऐप) के साथ अस्पष्ट विस्तार को जोड़ना जो दूसरे स्तर के विस्तार के लिए जाँच करता है या फ़ाइल में ही जाता है और मैजिक नंबर के लिए स्कैन करता है और फिर उपयुक्त प्रोग्राम लॉन्च करता है?


1
ट्रिड आपके हित में हो सकता है - इसमें 4400 बाइनरी हस्ताक्षर का एक डेटाबेस है।
14:37 पर josh3736

मुझे याद है कि यह RISC OS पर हुआ करता था, लेकिन कभी-कभी जब आपके पास एक से अधिक ऐप्स होते हैं, जो एक ही फ़ाइल प्रकार को संसाधित कर सकता है और यह गलत प्रोग्राम के साथ प्रोग्राम को खोल देगा!
मैट विल्को

@ मैट: बहुत बढ़िया, धन्यवाद! file-extension.net/seeker/file_extension_sch
endolith

जवाबों:


9

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

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

आपको या तो फ़ाइलों को फिर से नाम देना होगा (और उन्हें अद्वितीय फ़ाइल एक्सटेंशन देना होगा), या आपके लिए उपयुक्त एप्लिकेशन लॉन्च करने के लिए एक बैच फ़ाइल लिखें। अधिक जानकारी के लिए, यह टेक्नेट लेख देखें


1
मैं एक अद्वितीय फ़ाइल एक्सटेंशन बनाकर इस काम को करने की कोशिश कर रहा था, लेकिन भले ही उसने किया हो, असली समस्या यह है कि अधिकांश कार्यक्रम केवल सामग्री के बावजूद अपने स्वयं के एक्सटेंशन को पहचानेंगे, और उन्हें वैसे भी नहीं खोलेंगे।
KCotreau

2
मैं किसी को ऐसा करते देखना पसंद करूंगा, हालांकि। मुझे लगता है कि जिस तरह से आप इसे प्राप्त करेंगे, वह यह है कि सभी एक्सटेंशनों की एकल प्रोग्राम खुली हुई फ़ाइलें हों, और उस प्रोग्राम को अपना डेटाबेस रखें (NTFS के वैकल्पिक स्ट्रीम का उपयोग करके फ़ाइलों का ट्रैक रखें) और प्रत्येक संबंधित प्रोग्राम को लॉन्च करें, जिसके लिए उपयोगकर्ता परिभाषित करता है प्रत्येक फ़ाइल। यह नहीं होगा कि ज्यादा काम है, लेकिन मैं इस दृष्टिकोण के साथ समस्याओं का एक बहुत कुछ देख सकते हैं, तो शायद यही कारण है कि कोई भी यह किया गया है कि।
साशा चोडगोव

2
यह मुश्किल नहीं होगा - ऐसे उपकरण हैं जो इसे करते हैं (ट्रिड, या फ़ाइल) और अधिकांश पॉज़िक्स आधारित ओज़्स फ़ाइल हेडर को देखते हैं, और एक्सटेंशन नहीं। यह डिजाइन की पसंद का कम मामला है, जितना प्रयास होगा उतना ही होगा। स्वाभाविक रूप से इस एक तीसरी पार्टी के लिए कठिन एक बहुत होगा, लेकिन अगर एमएस लगा कि यह जरूरत थी, इस अर्द्ध तुच्छ हो सकता है
जर्नीमैन गीक

3
"फाइलों पर नज़र रखने के लिए NTFS की वैकल्पिक धाराओं का उपयोग करना।" यह मेरे लिए स्पष्ट है कि विंडोज लिनक्स / पॉसिक्स मॉडल को लागू क्यों नहीं करता है। बस इसके लिए इसे एक फ़ाइल पढ़ने की आवश्यकता है। अगर ऐसा था, तो हर बार आपने किसी फ़ाइल को राइट क्लिक किया, उसे पढ़ी गई महंगी फ़ाइल को बंद करना पड़ता है। इससे भी बदतर, कल्पना करें कि क्या यह एक नेटवर्क फ़ाइल थी और कनेक्शन में एक उल्लेखनीय अंतराल था। लोग सिर्फ WinDoze को दोषी ठहराएंगे। रेमंड चेन इस तकनीक पर भी प्रतिबंध लगाएगा क्योंकि यह एक तृतीयक भंडारण क्षेत्र पर एक फ़ाइल को वापस बुलाने का कारण होगा।
सर्फ

1
लेकिन विंडोज आपको उस मॉडल को तोड़ने की अनुमति देता है। । ।
सर्फ

8

मैंने इसे स्वयं हल किया:

मैंने एक पायथन लिपि बनाई जो किसी फ़ाइल के पहले कुछ बाइट्स को पढ़ती है और उनकी तुलना एक शब्दकोश से करती है, फिर मैजिक नंबरों के आधार पर उपयुक्त प्रोग्राम लॉन्च करती है।

import sys
import subprocess

magic_numbers = {
'OB': r'C:\Program Files (x86)\DesignSoft\Tina 9 - TI\TINA.EXE', # TINA
'*v': r'C:\Program Files (x86)\Orcad\Capture\Capture.exe', #PSpice
'DP': r'C:\Program Files (x86)\Design Explorer 99 SE\Client99SE.exe', #Protel
'\x00\xFE': r'C:\MentorGraphics\9.0PADS\SDD_HOME\Programs\powerlogic.exe', #PADS Logic
'\x10\x80': r'C:\Program Files (x86)\EAGLE-5.11.0\bin\eagle.exe', # Eagle
}

filename = sys.argv[1]
f = open(filename, 'rb')
# Read just enough bytes to match the keys
magic_n = f.read(max(map(len, magic_numbers)))

subprocess.call([magic_numbers[magic_n], filename])

नवीनतम संस्करण यहां होगा: उपयुक्त प्रोग्राम में अस्पष्ट फ़ाइलें लॉन्च करें

मैंने इस स्क्रिप्ट के साथ फाइल एक्सटेंशन को जोड़ने की कोशिश की, लेकिन विंडोज 7 ने मुझे नहीं आने दिया। इसने इसके बजाय इसे पायथन के साथ जोड़ा, इसलिए मैंने रजिस्ट्री में जाकर स्क्रिप्ट का नाम मैन्युअल रूप से जोड़ दिया।

एक पायथन स्क्रिप्ट के साथ एक फाइल एक्सटेंशन को कैसे जोड़ा जाए

सुधार के लिए कमरा, लेकिन यह काम करता है। मैं एक ही .sch एक्सटेंशन के साथ अलग-अलग फ़ाइलों पर डबल-क्लिक कर सकता हूं और वे अलग-अलग ऐप में खुलते हैं।

अद्यतन: मैंने इसे एक। YAMX कॉन्फ़िग फ़ाइल के साथ cx_freeze का उपयोग करके .exe में परिवर्तित कर दिया है, और इसे संबद्ध करना आसान है। इस काम का प्रस्ताव भी देखें । यकीन नहीं होता कि अगर मैं इसे विंडोज के लिए एक पूर्ण-व्यापी "कामचलाऊ लांचर" में बनाऊं या अगर एक .exe और एक साधारण YAML फाइल के साथ केवल एक फाइल एक्सटेंशन को संभालना बेहतर है।


2
यह वास्तव में एक निर्वासन के रूप में लिखने के लिए तुच्छ होगा। । ।
सर्फ

नहीं अगर आपको पता नहीं है कि
एक्सईएस

1
यह हां पर दस्तक नहीं थी। यह खुद के लिए कुछ था :)
सर्फ 22

@ सुरसब: तो क्या आपने मुझे अभी तक .exe लिखा है? यह तुच्छ है, है ना? :)
एंडोलिथ

मैं पूरी तरह से भूल गया! मैं पिछले सप्ताह के लिए सिल्वरलाइट पर 3 डी मेष के साथ खिलवाड़ कर रहा हूं। बाद में आज रात, के बाद मैं इस RAID सरणी babysit। । ।
सर्फस

3

शुरू करने के लिए, आप एक नए एक्सटेंशन के लिए एक प्रकार की फाइलों का नाम बदल सकते हैं, और उन प्रकार की फाइलों को खोलने के लिए डिफ़ॉल्ट प्रोग्राम सेट करने के लिए "ओपन विद डायलॉग" का उपयोग कर सकते हैं।

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

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

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


हां, लेकिन पूरी तरह से अलग एक्सटेंशन का उपयोग करने का मतलब है कि आप अक्सर कार्यक्रमों के भीतर से फाइलें नहीं खोल सकते ।
एंडोलिथ

हाँ मैंने बताया कि बाहर। दूसरा तरीका जो मैंने सुझाया है, हालांकि यह समस्या नहीं होगी।
जोएल

2

Microsoft Visual Studio आपके अंतिम विचार को लागू करता है। जब आप एक .sln फ़ाइल लॉन्च करते हैं, तो एक छोटा स्टब समाधान संस्करण संख्या की जांच करता है और विज़ुअल स्टूडियो का सही संस्करण लॉन्च करता है (यदि आपको कई संस्करण स्थापित हैं)।

बेशक, यहाँ समन्वय थोड़ा आसान है क्योंकि (ए) फ़ाइल प्रारूप इसके लिए डिज़ाइन किया गया है और (बी) वे एक ही निर्माता से एक ही सॉफ्टवेयर के सभी संस्करण हैं।


1

एक त्वरित समाधान एक्सप्लोरर संदर्भ मेनू में अतिरिक्त संदर्भ प्रविष्टियों को जोड़ना है। या 'ओपन विथ' संदर्भ प्रविष्टि का उपयोग करने के लिए। पहला अधिक आरामदायक है क्योंकि कोई कॉल पैरामीटर जोड़ सकता है और 'नाम' बता सकता है। यह एक ही प्रोग्राम के विभिन्न संस्करणों के साथ एक फ़ाइल खोलने की अनुमति देता है (यदि समानांतर स्थापित)।

बेशक, यह aproach स्वचालित नहीं है। एक को उचित आवेदन जानना होगा। लेकिन फ़ाइल प्रकारों के लिए जहां डेटाबेस आधारित पहचान विफल होगी (उदाहरण के लिए "मैजिक नंबर" के बिना पाठ फाइलें या अन्य फाइलें), आपके पास हमेशा विकल्प होता है।

BTW: कम ज्ञात OS 'GEOS' (जो अपने tiem और उससे आगे की दूरी पर एक Win3 प्रतियोगी था) ने सभी फ़ाइलों के लिए एक निश्चित 256 बाइट्स हेडर बनाया था, जहाँ एप्लिकेशन बनाते समय, आइकन एक कॉपीराइट नोटिस संग्रहीत किए गए थे (एक मुक्त क्षेत्र के साथ) खुद के नोट)। चूंकि यह फाइल का हिस्सा था न कि फाइल सिस्टम या OS डिक्शनरी, यह पारदर्शी था जब फाइल को फाइल सिस्टम में या एक अलग OS में भी ले जाया जाता था (W95 के लिए एक एक्सप्लोरर एक्सटेंशन था)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.