Windows가 동일한 확장자를 가진 파일을 다르게 취급하도록하십시오


10

여러 프로그램이 동일한 파일 확장자를 사용하지만 형식이 완전히 다르며 호환되지 않습니다. 예를 들어 .sch컴퓨터에 5 가지 이상의 형식 (TINA, PSpice, PADS, Protel 및 Eagle)의 파일이 있습니다. 이러한 파일을 두 번 클릭하면 파일이 열려는 프로그램에서 파일을 열 수 있도록 Windows에서 다르게 처리 할 수있는 방법이 있습니까?

Linux는 파일 자체에서 마술 숫자 를 사용 하여 차별화하고 대체 파일로 파일 확장자 만 사용합니다. ( 예를 들어, 이름이 무엇이든 관계없이 모든 PNG 파일 은 bytes로 시작 89 50 4E 47 0D 0A 1A 0A 합니다.) Windows에서 지원할 수 있으면 좋겠지 만 구현하기가 매우 어려울 수 있습니다. 어쩌면 filename.program1.schand 같은 두 번째 수준의 확장과 같은 간단한 것이 filename.program2.sch있습니까? 어쩌면 파일의 이름을 바꾸는 필터가 있습니까?

더 나은 아이디어 : 모호한 확장을 2 차 확장을 확인하거나 파일 자체로 들어가서 마법 번호를 스캔 한 다음 적절한 프로그램을 시작하는 전 처리기 (.bat 파일 또는 전용 앱)와 연결합니까?


1
TrID 는 여러분에게 흥미로울 수 있습니다. 4400 개의 이진 서명 데이터베이스가 있습니다.
josh3736

나는 이것이 RISC OS 에서 발생했던 것을 기억 하지만 때로는 같은 파일 형식을 처리 할 수있는 여러 응용 프로그램이 있고 잘못된 프로그램으로 프로그램을 열 때 좌절감을 유발하는 데 사용되었습니다!
Matt Wilko

답변:


9

Windows는 파일의 정보를 기반으로 파일을 시작 하지 않습니다 . 데이터베이스를 구축하면 엄청난 양의 작업과 프로그래밍이 필요합니다. 파일을 식별하는 유일한 방법은 파일의 이진 서명을 사용하는 것입니다 (파일에 파일이있는 경우). 소프트웨어 작성자가이를 구현해야합니다.

Windows에서 파일은 특정 파일 확장자에 대해 지정한 프로그램으로 전달됩니다. Windows는 파일의 확장자를 마지막 마침표 뒤에 나오는 하위 문자열로 결정하므로 게시 한 파일 이름으로는 불가능합니다.

파일 이름을 바꾸고 고유 한 파일 확장자를 부여하거나 배치 파일을 작성하여 적절한 응용 프로그램을 시작해야합니다. 자세한 내용은 이 Technet 기사를 참조하십시오 .


1
고유 한 파일 확장자를 만들어서이 작업을하려고했지만 실제로 그렇게하더라도 문제는 대부분의 프로그램이 내용에도 불구하고 자신의 확장자 만 인식하고 어쨌든 열지 않는다는 것입니다.
KCotreau

2
그래도 누군가가 이것을하는 것을보고 싶습니다. 나는 당신이 그것을 해결할 수있는 방법은 모든 확장 프로그램의 단일 파일 열기 파일을 보유하고 해당 프로그램이 자체 데이터베이스를 유지하도록하고 (NTF의 대체 스트림을 사용하여 파일을 추적) 사용자가 정의한 각 프로그램을 시작하는 것입니다. 각 파일. 그것은되지 않을 것 많은 일을하지만 아무도 그 일을하지 않았다 아마 이유 그래서 나는,이 방법에 문제를 많이 볼 수 있습니다.
Sasha Chedygov

2
그것은 어렵지 않을 것입니다-도구를 사용하거나 (마치 또는 파일), 대부분의 posix 기반 ose는 확장자가 아닌 파일 헤더를 봅니다. 그것은 노력의 양보다 디자인 선택의 문제가 적습니다. 당연히 이것은 제 3 자에게는 훨씬 더 어려울 것이지만, MS가 필요하다고 느낀다면, 이것은 사소한 것일 수 있습니다
Journeyman Geek

3
"NTFS의 대체 스트림을 사용하여 파일을 추적합니다." Windows가 Linux / POSIX 모델을 구현하지 않는 이유는 분명합니다. 단순히 파일 읽기가 필요하다는 것입니다. 이 경우 파일을 마우스 오른쪽 버튼으로 클릭 할 때마다 값 비싼 파일 읽기를 실행해야합니다. 더 나쁜 것은 네트워크 파일이고 연결에 눈에 띄는 지연이 있는지 상상해보십시오. 사람들은 WinDoze를 탓할 것입니다. Raymond Chen은이 기술을 강타하여 파일이 3 차 저장 영역에있는 경우 파일을 다시 불러 오게합니다.
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 스크립트와 연결하는 방법

개선의 여지가 있지만 작동합니다. 동일한 .sch 확장자를 가진 다른 파일을 두 번 클릭하면 다른 앱에서 열립니다.

업데이트 : 외부 YAML 구성 파일과 함께 cx_freeze를 사용하여 .exe로 변환했으며 연결하기 쉽습니다. 이 libmagic 제안 도 참조하십시오 . 본격적인 "Windows 용 libmagic launcher"로 만들어야하는지 또는 하나의 .exe 및 간단한 YAML 파일로 하나의 파일 확장자 만 처리하는 것이 더 좋은지 확실하지 않습니다.


2
이것은 실제로 exe로 작성하는 것이 쉽지 않습니다. . .
surfasb


1
나중에 노크가 아니었다. 그것은 : 자신을 위해 뭔가를했다
surfasb

@surasb : 아직 .exe를 작성 했습니까? 사소한 일 이지요? :)
endolith

나는 완전히 잊었다! 지난 주 Silverlight에서 3D 메쉬를 엉망으로 만들었습니다. 오늘 밤이 RAID 어레이를 보모 한 후 . .
surfasb

3

시작하려면, 파일 형식 중 하나의 이름을 바꾸어 새 확장자를 갖도록하고 "연결 프로그램"대화 상자를 사용하여 해당 형식의 파일을 열도록 기본 프로그램을 설정하십시오.

그러나 이름 바꾸기 문제는 다루지 않습니다. 그러나 프로그램 중 하나에서 모든 파일을 저장할 특정 폴더를 만들어 작업을 단순화합니다. 그런 다음 해당 폴더의 파일 이름을 새 파일 확장자로 자동 변경하는 스크립트를 작성할 수 있습니다.

설정 방법에 따라 프로그램에서 "파일 열기"대화창에 문제가있을 수 있습니다. 그러나 모든 파일이있는 단일 폴더가 있다면 그 폴더를 사용할 수 있어야합니다.

더 복잡하지만 잠재적으로 더 좋은 방법은 프록시 프로그램을 만드는 것입니다. 모든 파일 확장자는 유지하되 프록시 프로그램에서 열어야합니다. 프로그램이 바이너리를 검사하도록하고 파일 형식과 시작할 프로그램을 선택하도록하십시오. 이를 위해서는 프로그램을 작성하는 데 약간의 시간을 할애해야합니다.


예, 그러나 완전히 다른 확장자를 사용하면 종종 프로그램 에서 파일을 열 수 없습니다 .
endolith

예, 지적했습니다. 내가 제안한 두 번째 방법은 그 문제가 없습니다.
Joel

2

Microsoft Visual Studio는 마지막 아이디어를 구현합니다. .sln 파일을 시작하면 작은 스텁이 솔루션 버전 번호를 확인하고 올바른 버전의 Visual Studio를 시작합니다 (여러 버전이 설치되어있는 경우).

물론, 여기에서의 조정은 (A) 파일 형식이이를 위해 설계되었으며 (B) 동일한 제조업체의 동일한 소프트웨어의 모든 버전이기 때문에 약간 더 쉽습니다.


1

빠른 해결 방법은 추가 컨텍스트 항목을 탐색기 컨텍스트 메뉴에 추가하는 것입니다. 또는 'open with'컨텍스트 항목을 사용하십시오. 첫 번째는 통화 매개 변수를 추가하고 '말하기'이름을 지정할 수있어 더욱 편리합니다. 또한 동일한 프로그램의 다른 버전으로 파일을 열 수 있습니다 (병렬로 설치된 경우).

물론이 접근 방식은 자동이 아닙니다. 적절한 응용을 알아야합니다. 그러나 데이터베이스 기반 탐지가 실패하는 파일 유형 (예 : 텍스트 파일 또는 "마법 번호"가없는 다른 파일)의 경우 항상 선택할 수 있습니다.

BTW : 잘 알려지지 않은 OS 'GEOS'(임의 및 그 이상의 Win3 경쟁자)는 저작권 표시가 저장된 응용 프로그램, 아이콘 (무료 필드와 함께)이있는 모든 파일에 대해 고정 된 256 바이트 헤더를 가졌습니다. 자신의 노트). 이것은 파일 시스템이나 OS 사전이 아닌 파일의 일부이므로 파일이 파일 시스템간에 또는 다른 OS (W95 용 익스플로러 확장명)로 이동되었을 때 투명했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.