ให้ Windows จัดการไฟล์ที่มีนามสกุลเดียวกันต่างกัน


10

หลายโปรแกรมใช้นามสกุลไฟล์เดียวกัน แต่รูปแบบนั้นแตกต่างกันโดยสิ้นเชิงและเข้ากันไม่ได้ ตัวอย่างเช่นฉันมี.schไฟล์ในคอมพิวเตอร์ของฉันที่อยู่ในรูปแบบที่แตกต่างกันอย่างน้อย 5 รูปแบบ (TINA, PSpice, PADS, Protel และ Eagle) มีวิธีที่จะทำให้ Windows จัดการกับสิ่งที่แตกต่างกันหรือไม่ดังนั้นการคลิกสองครั้งที่ไฟล์ดังกล่าวจะเปิดขึ้นมาในโปรแกรมที่ต้องการเปิด

ลีนุกซ์ใช้หมายเลขเวทย์มนตร์ในไฟล์เพื่อแยกความแตกต่างและใช้เฉพาะส่วนขยายไฟล์เป็นแผนสำรอง ( ไฟล์ PNG ทั้งหมด เริ่มต้นด้วยไบต์ 89 50 4E 47 0D 0A 1A 0Aตัวอย่างเช่นไม่ว่าคุณจะตั้งชื่ออะไร) มันคงจะดีถ้า Windows สามารถรองรับสิ่งนี้ได้ แต่อาจเป็นเรื่องยากที่จะติดตั้ง บางทีสิ่งที่ง่ายกว่าเช่นส่วนขยายระดับที่สองเช่นfilename.program1.schและfilename.program2.sch? บางทีตัวกรองบางประเภทที่เปลี่ยนชื่อไฟล์ได้ทันทีหรือไม่

แนวคิดที่ดีกว่า: เชื่อมโยงส่วนขยายที่กำกวมกับตัวประมวลผลล่วงหน้า (ไฟล์. bat หรือแอปเฉพาะ) ที่ตรวจสอบส่วนขยายระดับที่สองหรือเข้าไปในไฟล์ของตัวเองแล้วสแกนหาหมายเลขเวทย์มนตร์แล้วเปิดโปรแกรมที่เหมาะสมหรือไม่


1
Tridอาจเป็นที่สนใจของคุณ - มีฐานข้อมูลเลขฐานสอง 4400
josh3736

ฉันจำได้ว่าสิ่งนี้เคยเกิดขึ้นในRISC OSแต่บางครั้งก็ทำให้เกิดความยุ่งยากเมื่อคุณมีแอพหลายตัวที่สามารถประมวลผลไฟล์ประเภทเดียวกันและมันจะเปิดโปรแกรมด้วยโปรแกรมที่ผิด!
Matt Wilko

@ แมท: เยี่ยมมากขอบคุณ! file-extension.net/seeker/file_extension_sch
endolith

คำตอบ:


9

Windows จะไม่เปิดไฟล์ตามข้อมูลใด ๆ ในไฟล์ซึ่งจะเป็นการสร้างฐานข้อมูลสำหรับการทำงานและการเขียนโปรแกรมจำนวนมาก วิธีเดียวที่แท้จริงในการระบุไฟล์คือโดยลายเซ็นไบนารีในไฟล์หากไฟล์มีอยู่ด้วยและนี่ก็ขึ้นอยู่กับผู้สร้างซอฟต์แวร์ที่จะนำไปใช้

ใน Windows ไฟล์ต่าง ๆ จะถูกส่งไปยังโปรแกรมที่คุณระบุสำหรับนามสกุลไฟล์เฉพาะ Windows จะพิจารณานามสกุลของไฟล์เป็นซับสตริงซึ่งตามหลังการเกิดจุดสุดท้ายดังนั้นจึงเป็นไปไม่ได้ที่ชื่อไฟล์ที่คุณโพสต์

คุณต้องตั้งชื่อไฟล์ใหม่ (และให้นามสกุลไฟล์ที่ไม่ซ้ำกัน) หรือเขียนไฟล์แบตช์เพื่อเปิดแอปพลิเคชันที่เหมาะสมสำหรับคุณ สำหรับรายละเอียดเพิ่มเติมโปรดดูบทความ Technet นี้


1
ฉันพยายามทำให้งานนี้เกิดขึ้นด้วยการสร้างนามสกุลไฟล์ที่ไม่ซ้ำกัน แต่ถึงแม้ว่าเขาจะทำปัญหาที่แท้จริงก็คือโปรแกรมส่วนใหญ่จะรู้จักเฉพาะส่วนขยายของตัวเองแม้จะมีเนื้อหาอยู่ก็ตามและจะไม่เปิดมันต่อไป
KCotreau

2
ฉันชอบที่จะเห็นคนทำเช่นนี้แม้ว่า ฉันคิดว่าวิธีที่คุณจะหลีกเลี่ยงก็คือให้เปิดไฟล์โปรแกรมเดียวของส่วนขยายทั้งหมดและให้โปรแกรมนั้นเก็บฐานข้อมูลของตัวเอง (โดยใช้กระแสข้อมูลสำรองของ NTFS เพื่อติดตามไฟล์) และเปิดแต่ละโปรแกรมที่ผู้ใช้กำหนด แต่ละไฟล์ มันจะไม่เป็นที่ทำงานมาก แต่ฉันสามารถดูจำนวนมากปัญหาด้วยวิธีนี้เพื่อที่ว่าอาจเป็นเหตุผลที่ไม่มีใครได้ทำมัน
Sasha Chedygov

2
มันจะไม่ยากเกินไป - มีเครื่องมือที่ทำ (trid หรือไฟล์) และส่วนใหญ่ที่ใช้ posix จะดูที่ส่วนหัวของไฟล์ไม่ใช่ส่วนขยาย มันเป็นเรื่องของตัวเลือกการออกแบบน้อยกว่าปริมาณของความพยายาม โดยธรรมชาตินี่จะยากกว่ามากสำหรับบุคคลที่สาม แต่ถ้า MS รู้สึกว่าต้องการมันอาจเป็นเรื่องเล็กน้อย
Journeyman Geek

3
"การใช้สตรีมสำรองของ NTFS เพื่อติดตามไฟล์" เห็นได้ชัดว่าทำไม Windows ไม่ใช้โมเดล Linux / POSIX เพียงแค่ว่ามันต้องอ่านไฟล์ หากเป็นเช่นนั้นทุกครั้งที่คุณคลิกขวาไฟล์จะต้องทำการอ่านไฟล์ที่มีราคาแพง ยิ่งแย่ไปกว่านั้นลองจินตนาการว่ามันเป็นไฟล์เครือข่ายและการเชื่อมต่อมีความล่าช้าอย่างเห็นได้ชัด ผู้คนจะตำหนิ WinDoze เรย์มอนด์เฉินจะทุบตีเทคนิคนี้และทำให้มันทำให้ไฟล์ถูกเรียกคืนถ้ามันอยู่ในพื้นที่จัดเก็บในระดับอุดมศึกษา
surfasb

1
แต่ Windows อนุญาตให้คุณแยกโมเดลนั้นออก . .
surfasb

8

ฉันแก้ไขด้วยตัวเอง:

ฉันสร้างสคริปต์ Python ที่อ่านสองสามไบต์แรกของไฟล์และเปรียบเทียบกับพจนานุกรมจากนั้นเปิดตัวโปรแกรมที่เหมาะสมโดยใช้ตัวเลขเวทย์มนตร์

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])

รุ่นล่าสุดจะอยู่ที่นี่: เปิดไฟล์ที่ไม่ชัดเจนในโปรแกรมที่เหมาะสม

ฉันพยายามเชื่อมโยงไฟล์นามสกุลกับสคริปต์นี้ แต่ Windows 7 ไม่ยอมให้ฉัน มันเพิ่งเชื่อมโยงกับ Python แทนดังนั้นฉันเข้าไปในรีจิสทรีและเพิ่มชื่อสคริปต์ด้วยตนเอง

วิธีเชื่อมโยงนามสกุลไฟล์กับสคริปต์ Python

ปรับปรุงห้องพัก แต่ใช้งานได้ ฉันสามารถดับเบิลคลิกที่ไฟล์ต่าง ๆ ด้วยนามสกุล. sch เดียวกันและเปิดในแอพต่างๆ

อัปเดต:ฉันได้แปลงเป็น. exe โดยใช้ cx_freeze พร้อมไฟล์กำหนดค่า YAML ภายนอกและเชื่อมโยงได้ง่าย ดูข้อเสนอ libmagicนี้ ไม่แน่ใจว่าฉันควรทำสิ่งนี้ให้เป็น "ตัวเปิดใช้งาน libmagic เต็มรูปแบบสำหรับ Windows" หรือดีกว่าหรือไม่ถ้าจัดการส่วนขยายไฟล์เดียวด้วยไฟล์. exe และไฟล์ YAML


2
สิ่งนี้จะเป็นเรื่องเล็กน้อยที่จะเขียนเป็น exe . .
surfasb

ไม่ใช่ถ้าคุณไม่รู้ว่าจะเขียนยังไงดี :)
endolith

1
มันไม่ใช่เสียงเคาะบนยา มันเป็นบางสิ่งบางอย่างสำหรับตัวเอง :)
surfasb

@surasb: คุณเขียนเป็น. exe หรือยัง มันไม่สำคัญใช่มั้ย :)
endolith

ฉันลืมไปโดยสิ้นเชิง! ฉันยุ่งกับตาข่าย 3 มิติบน Silverlight ในสัปดาห์ที่ผ่านมา ต่อมาคืนนี้หลังจากที่ฉันดูแลอาร์เรย์ RAID นี้ . .
surfasb

3

ในการเริ่มต้นคุณสามารถเปลี่ยนชื่อไฟล์ประเภทใดประเภทหนึ่งเพื่อให้มีนามสกุลใหม่และใช้กล่องโต้ตอบ "เปิดด้วย" เพื่อตั้งค่าโปรแกรมเริ่มต้นให้เปิดไฟล์ประเภทดังกล่าว

สิ่งนี้ไม่ได้จัดการกับปัญหาการเปลี่ยนชื่อแม้ว่า แต่คุณทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยการสร้างโฟลเดอร์เฉพาะที่คุณวางไฟล์ทั้งหมดจากหนึ่งในโปรแกรม จากนั้นคุณสามารถเขียนสคริปต์เพื่อเปลี่ยนชื่อไฟล์ในโฟลเดอร์นั้นเป็นนามสกุลไฟล์ใหม่ของคุณโดยอัตโนมัติ

คุณอาจมีปัญหากับกล่องโต้ตอบ "เปิดไฟล์" ในโปรแกรมของคุณขึ้นอยู่กับการตั้งค่า แต่ถ้าคุณมีโฟลเดอร์เดียวที่ไฟล์ทั้งหมดของคุณคุณควรจะสามารถใช้มันได้

วิธีที่ซับซ้อนกว่า แต่อาจดีกว่าคือการสร้างโปรแกรมพรอกซี เก็บนามสกุลไฟล์ทั้งหมด แต่เปิดโดยพร็อกซีโปรแกรม ให้โปรแกรมของคุณตรวจสอบไบนารีและเลือกประเภทของไฟล์และโปรแกรมที่จะเริ่ม สิ่งนี้จะทำให้คุณต้องใช้เวลาในการเขียนโปรแกรมซึ่งอาจจะคุ้มค่าหรือไม่คุ้มกับคุณ


ใช่ แต่การใช้ส่วนขยายต่างกันทั้งหมดหมายความว่าคุณไม่สามารถเปิดไฟล์จากภายในโปรแกรมได้
endolith

ใช่ฉันชี้ไปที่ วิธีที่สองที่ฉันแนะนำจะไม่มีปัญหานั้น
โจเอล

2

Microsoft Visual Studio ใช้ความคิดสุดท้ายของคุณ เมื่อคุณเรียกใช้ไฟล์. sln stub ขนาดเล็กจะตรวจสอบหมายเลขเวอร์ชันของโซลูชันและเรียกใช้ Visual Studio รุ่นที่ถูกต้อง (หากคุณติดตั้งหลายรุ่น)

แน่นอนการประสานงานที่นี่นั้นง่ายกว่าเล็กน้อยเนื่องจาก (A) รูปแบบไฟล์ถูกออกแบบมาสำหรับสิ่งนี้และ (B) พวกเขาเป็นซอฟต์แวร์รุ่นเดียวกันทั้งหมดจากผู้ผลิตรายเดียวกัน


1

วิธีแก้ปัญหาอย่างรวดเร็วคือการเพิ่มรายการบริบทเพิ่มเติมให้กับเมนูบริบทของ explorer หรือเพื่อใช้รายการบริบท 'เปิดด้วย' อย่างแรกคือสะดวกสบายมากขึ้นเพราะสามารถเพิ่มพารามิเตอร์การโทรและระบุชื่อ 'บอก' นอกจากนี้ยังอนุญาตให้เปิดไฟล์ที่มีเวอร์ชันเดียวกันของโปรแกรมเดียวกัน (หากติดตั้งแบบขนาน)

แน่นอน aproach นี้ไม่อัตโนมัติ หนึ่งจะต้องรู้การใช้งานที่เหมาะสม แต่สำหรับประเภทไฟล์ที่การตรวจจับด้วยฐานข้อมูลจะล้มเหลว (เช่นไฟล์ข้อความหรือไฟล์อื่น ๆ ที่ไม่มี "หมายเลขมายากล") คุณจะมีตัวเลือกเสมอ

BTW: ระบบปฏิบัติการ 'GEOS' ที่ไม่เป็นที่รู้จัก (ซึ่งเป็นคู่แข่งของ Win3 ที่ tiem และไกลไปข้างหน้า) มีส่วนหัวที่คงที่ 256 ไบต์สำหรับไฟล์ทั้งหมดที่แอปพลิเคชั่นการสร้างไอคอนประกาศลิขสิทธิ์ถูกเก็บไว้ บันทึกของตัวเอง) เนื่องจากนี่เป็นส่วนหนึ่งของไฟล์ไม่ใช่ระบบไฟล์หรือพจนานุกรมระบบปฏิบัติการมันจึงโปร่งใสเมื่อไฟล์ถูกย้ายข้ามระบบไฟล์หรือแม้แต่กับระบบปฏิบัติการอื่น (มีส่วนขยายสำหรับ W95)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.