end*_*ith 10 windows windows-7 file-association file-extension
多个程序使用相同的文件扩展名,但格式完全不同且不兼容。例如,.sch我的计算机上有至少 5 种不同格式的文件(TINA、PSpice、PADS、Protel 和 Eagle)。有没有办法让 Windows 以不同的方式对待它们,以便双击这样的文件在它打算打开的程序中打开它?
Linux 使用文件本身中的幻数来区分,并且仅使用文件扩展名作为后备计划。(例如,所有PNG 文件都 以 bytes 开头 89 50 4E 47 0D 0A 1A 0A,无论您如何命名它们。)如果 Windows 可以支持这一点就好了,但可能很难实现。也许更简单的东西,比如二级扩展,比如filename.program1.sch和filename.program2.sch?也许某种过滤器可以即时重命名文件?
更好的主意:将不明确的扩展名与检查二级扩展名或进入文件本身并扫描幻数然后启动适当程序的预处理器(.bat 文件或专用应用程序)相关联?
Windows并没有推出基于文件中的任何信息文件-建立一个数据库,将采取的工作和节目数量惊人的。唯一真正识别文件的方法是通过文件中的二进制签名,如果文件甚至有二进制签名,这取决于软件作者来实现。
在 Windows 中,文件将传递给您为特定文件扩展名指定的程序。Windows 将文件的扩展名确定为最后一次出现的句点之后的子字符串,因此您发布的文件名是不可能的。
您必须重新命名文件(并为它们提供唯一的文件扩展名),或者编写一个批处理文件来为您启动适当的应用程序。有关更多详细信息,请参阅此 Technet 文章。
我自己解决了:
我制作了一个 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])
Run Code Online (Sandbox Code Playgroud)
最新版本将在此处:在适当的程序中启动不明确的文件
我试图将文件扩展名与此脚本相关联,但 Windows 7 不允许我这样做。它只是将它与 Python 相关联,所以我进入了注册表并手动添加了脚本名称。

改进的空间,但它的工作原理。我可以双击具有相同 .sch 扩展名的不同文件,它们会在不同的应用程序中打开。
更新:我已使用 cx_freeze 将其转换为 .exe,并带有外部 YAML 配置文件,并且很容易关联。另请参阅此 libmagic 提案。不确定我是否应该将它变成一个成熟的“Windows 的 libmagic 启动器”,或者最好只处理一个带有一个 .exe 和一个简单 YAML 文件的文件扩展名。
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |