Trên Windows, phần mở rộng tên tệp nào biểu thị một tệp thực thi?


17

Trên Windows, * .exe, * .bat, * .cmd và * .com đều đại diện cho các chương trình hoặc tập lệnh shell có thể chạy, chỉ bằng cách nhấp đúp vào chúng. Có bất kỳ phần mở rộng tên tệp nào khác chỉ ra một tệp có thể thực thi được không?

EDIT : Khi tôi nhảy vào một dự án mới (hoặc quay lại một dự án cũ!), Một trong những điều phổ biến tôi muốn làm khi nhìn xung quanh là tìm hiểu những công cụ nào có. Trên Unix (mà tôi đã sử dụng trong nhiều thập kỷ), có một bit thực thi, vì vậy điều này đơn giản như:

find . -executable -type f

Tôi hình dung rằng trên Windows, dường như có một cơ chế phức tạp hơn nhiều đối với "có thể thực thi được không (và cách tôi thực thi nó)", sẽ có một số lượng nhỏ các phần mở rộng tên tệp sẽ phục vụ cho cùng một mục đích.

Đối với dự án hiện tại của tôi, *.exe *.bat *.cmdgần như chắc chắn là đủ, nhưng tôi đoán tôi sẽ hỏi nếu có một danh sách có thẩm quyền.

Câu trả lời:


26

Các tệp "thực thi" cơ bản (những tệp mà Windows có vẻ sẽ thực thi thông qua PATH) được lưu trữ trong một biến môi trường có tên là PATHEXT. Bạn có thể thấy điều này từ một dấu nhắc lệnh:

C:\>set PATHEXT

Trên máy của tôi, tôi nhận được điều này (WinXP):

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1

Đây không phải là một danh sách độc quyền. Windows cũng sẽ thực thi các tệp khác (ví dụ: trình bảo vệ màn hình có phần mở rộng là .scr và là tệp thực thi); Windows cũng sẽ cho phép thực thi các phần mở rộng tệp khác, nhưng các phần mở rộng được liệt kê ở trên là phần mở rộng thực thi mặc định .


1
Rực rỡ tìm thấy!
barlop

1
ngoài ra, bạn có thể thêm nhiều hơn - ví dụ: thêm .py để cho "pyscript" chạy "pyscript.py"!
Phoshi

@Phoshi nhưng với .py thì bạn sẽ trở thành bên thứ ba và không có kết thúc
barlop

@barlop; Quả thực là tôi, nhưng đó là một điều hữu ích để biết, nếu tiếp tuyến với câu hỏi :)
Phoshi

5
Cũng có .SCR cho trình bảo vệ màn hình. Chúng có thể (và làm) chứa mã thực thi thực tế cho trình bảo vệ màn hình. Họ chỉ không ở PATHEXT.
sinni800

2

Một phổ biến cho các chương trình cài đặt là .msi.


3
Nó thực sự ít định dạng thực thi hơn và nhiều định dạng tập lệnh hơn, vì nó vẫn cần được phân tích cú pháp msiexec.exe.
Hello71

@ Hello71: Bạn có thực sự 12 tuổi?
paradroid

@paradroid: không, anh ấy thực sự không. nhìn phong cách viết của anh ấy
studiohack

@paradroid: Có thực sự quan trọng không?
Xin chào71

@studiohack: Đó là điều tôi bối rối. @ Hello71: Vâng, đúng vậy, vì nếu là bạn, bạn làm tôi sợ.
paradroid

2

.vbs là một tập lệnh. và .js

Nhưng nếu bạn biết một số lịch sử thì bạn có thể đặt mọi thứ vào bối cảnh tốt hơn. Tôi cho rằng nếu tôi đã không sử dụng máy tính bao lâu thì tôi cũng có thể tập trung vào việc biết phần mở rộng nào có thể thực thi được .. vì chúng khá thú vị và có vẻ cơ bản .. và tôi cho rằng chúng là .. Nhưng hãy chú ý theo thời gian, .COM đã chết rất nhiều sau DOS, chỉ chủ yếu được biết là tôi cho rằng sau đó, nếu ở tất cả, trong windows 9x trong shell lệnh.com. Có lẽ những người NT cũ đã sử dụng chúng rất nhiều. Kịch bản .. vbs xuất hiện khoảng thời gian win9x có lẽ .. vì vậy những cái mới xuất hiện. ps1 thậm chí còn mới hơn vbs.

.COM rất cũ .. tôi không chắc liệu windows xp cho các ví dụ có dựa trên bất kỳ tệp .COM nào không. Nhưng nó có một lệnh.com nhiều hơn cho các ứng dụng cũ tôi đoán.

.BAT là một tập lệnh..back từ ngày DOS. vẫn còn sử dụng ngày hôm nay. .VBS hiện đại hơn nhưng .BAT vẫn được sử dụng và sẽ không sử dụng bất cứ lúc nào sớm và mọi người sử dụng hợp lý cả hai. Có .CMD mà tôi chưa sử dụng nhưng có lẽ không quá khác biệt với bất cứ thứ gì. Có ps1 (powershell. Cái này hiện đại hơn vbscript) Nếu chúng ta đang nói các kịch bản theo nghĩa lỏng lẻo, có .REG

Thực sự thuật ngữ thực thi chỉ áp dụng cho EXE và .COM (.COM về cơ bản đã bị tuyệt chủng .. thêm một điều win9x (dấu nhắc lệnh trong win9x là command.com, không có cmd.exe) và các tệp COM là một điều của DOS. Nhưng không phải CMD của NT, ví dụ shell lệnh của NT là cmd.exe mặc dù như đã đề cập, có một lệnh.com trong NT tôi đoán cho các ứng dụng cũ nhưng NT hầu như không dựa vào nó)

.MSC ví dụ: start..run..service.msc Chúng không phải là tệp thực thi..Tôi cho rằng chúng là một loại tập lệnh .. services.msc dường như được viết bằng xml) Nhưng nếu đi lỏng lẻo thì người ta có thể tiến thêm một bước đối với những thứ không thuộc hệ thống và nói rằng các trang HTML là một trong số chúng được diễn giải .. giống như một tập lệnh. Nhưng không phải bởi hệ điều hành mặc dù .. .CPL không phải là tập lệnh .. nhìn vào chúng trong notepad. Mọi người có xu hướng không nghĩ về chúng như các tập lệnh thực thi hoặc tập lệnh, có thể chỉ có các nhà phát triển MS viết chúng. (hoặc nếu người khác làm thì điều đó rất không phổ biến!)


Thật không may, việc thêm .MSCvào PATHEXTkhông cho phép bạn chạy snap-in MMC mà không cần thêm tiện ích mở rộng (ví dụ servicesthay vì services.msc). :-(
Synetech

@Synetech vì đã có a services.exe.
kinokijuf

@kinokijuf, đúng; nếu bạn chạy diskmgmt(không có phần mở rộng) từ dấu nhắc lệnh thì nó sẽ hoạt động, nhưng chạy servicessẽ không. Tuy nhiên, không ai trong số họ sẽ hoạt động nếu bạn cố chạy chúng từ hộp thoại Run mà không có .mscphần mở rộng, mặc dù pathextbiến toàn hệ thống có chứa .msc.
Synetech

2

Trên Windows, phần mở rộng tên tệp nào biểu thị một tệp thực thi?

Biểu thị cái gì?

Tôi biết rằng câu hỏi có thể hơi khó hiểu vào lúc này, nhưng câu hỏi quan trọng. Khi tôi giải thích tại sao nó quan trọng, câu hỏi sẽ trở nên rõ ràng hơn.

Mặc dù câu trả lời của Ken White về biến PATHEXT (trong "môi trường" của dấu nhắc lệnh) là một câu trả lời hay và ngắn, và câu trả lời đó có thể hoạt động tốt cho bạn, nhưng câu trả lời chưa đầy đủ. Lý do không đầy đủ là câu trả lời đúng là khác nhau dựa trên những gì bạn đang cố gắng làm.

Ví dụ: bạn có thể thử:

  • Chạy chương trình từ "dấu nhắc lệnh truyền thống" ("CMD"), bằng cách nhập tên tệp đầy đủ của nó
  • Chạy chương trình từ "dấu nhắc lệnh truyền thống" ("CMD"), bằng cách nhập tên tệp cơ sở, nhưng bỏ phần mở rộng của nó
  • Sử dụng lệnh "bắt đầu" được tích hợp trong "dấu nhắc lệnh truyền thống" ("CMD")
  • Chạy một chương trình từ PowerShell
  • Chạy một chương trình từ mục menu "Chạy", được tìm thấy trên menu bắt đầu
  • Chạy chương trình từ Explorer, bằng cách bấm đúp vào biểu tượng liên quan đến tệp kết thúc bằng phần mở rộng
  • Yêu cầu Microsoft Internet Explorer mở tệp đã tải xuống
  • Chạy một chương trình bằng cách sử dụng một chức năng từ Microsoft Windows API. (Đây là điều mà người dùng cuối thường không làm, nhưng các lập trình viên máy tính có thể làm điều này và vì vậy thông tin có liên quan đến họ.)

Một số phương pháp chạy chương trình này có thể sử dụng các phương pháp khác nhau để xác định phần mở rộng tên tệp nào có thể được hỗ trợ. Cụ thể, sử dụng CMD có thể khác với menu Run.

Chẳng hạn, blog khó hiểu của Wes: Tùy chỉnh Windows Run Command ... lưu ý các vị trí khác nhau đang được kiểm tra, bao gồm khóa đăng ký.

Câu trả lời cũng có thể phụ thuộc vào phiên bản Microsoft Windows nào đang được sử dụng. Trong Windows 10, tôi chỉ cần gõ tên của tệp zip tại dấu nhắc lệnh và nó đã mở Windows Explorer. Tôi dường như nhớ rằng không hoạt động trong Windows XP (mặc dù trong Windows XP, tôi có thể gõ "start filename.zip" và có cùng loại hiệu ứng). Vì vậy, hoặc bộ nhớ của tôi bị lỗi hoặc Microsoft đã cố gắng cải thiện các phiên bản Windows mới hơn. (Hy vọng, đối với tôi, cái sau.)

Trong dấu nhắc lệnh truyền thống của Windows 10 (chạy "CMD"), khi tôi đi đến vị trí (sử dụng lệnh "CD") của tệp zip và nhập "filename.zip", thì tệp sẽ mở. Khi tôi đến vị trí đó và nhập "tên tệp" (bỏ phần mở rộng tệp ".zip"), thì Windows không tìm thấy tệp. Tuy nhiên nếu tôi chạy " ECHO %PATHEXT%" và sau đó " SET PATHEXT=%PATHEXT%;.ZIP" (và sau đó " ECHO %PATHEXT%" để đảm bảo tôi có hiệu ứng mong muốn), thì tôi có thể nhập "tên tệp" và dấu nhắc lệnh sẽ tìm thấy tệp .ZIP. Vì vậy, đó là tác động của biến% PATHEXT%.

Bạn có thể thấy một danh sách các phần mở rộng khác bằng cách chạy ASSOClệnh. Ví dụ: chạy lệnh đó sẽ hiển thị nhiều dòng đầu ra bao gồm cả dòng sau (trên hệ thống của tôi) - " .zip=CompressedFolder". Sau đó, tôi có thể thấy những gì chạy bằng cách gõ " FTYPE | FIND /I "CompressedFolder"". (Đó là có nghĩa là cho dòng lệnh truyền thống. PowerShell sẽ không giống như những dấu ngoặc kép unescaped.) (Nếu bạn chỉ cần gõ " FTYPE" mà không có phần còn lại của dòng lệnh, bạn sẽ thấy kết quả khá hơn một chút thông tin về các phần mở rộng khác.)

Nếu tôi gõ " ASSOC | FIND /C "."", trên máy tính Windows 10 của mình, thì tôi thấy rằng tôi có 339 dòng đầu ra khi tôi kiểm tra các liên kết tệp theo cách đó.

MS KB 162059 là tất cả về việc điều chỉnh cách Internet Explorer mở tài liệu Office.

Vì vậy, yêu cầu danh sách thực thi mặc định là quá mơ hồ. Các thành phần khác nhau của Microsoft Windows có thể sử dụng các tài nguyên khác nhau, vì vậy câu hỏi cần phải cụ thể hơn để có câu trả lời chính xác.

Câu hỏi đã đề cập bằng cách sử dụng Explorer để nhấp đúp vào biểu tượng. Để xem danh sách các tệp thực thi được sử dụng bởi điều đó, tôi tin rằng bạn sẽ muốn kiểm tra sổ đăng ký. Bạn có thể chạy nó từ một dấu nhắc lệnh:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts

(Tôi sẽ không liệt kê chúng ở đây. Có 286 trong số chúng trên máy tính Windows 10 của tôi.)

Đó là danh sách các phần mở rộng. Để xem thêm thông tin, bao gồm chi tiết về các tiện ích mở rộng:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts /s

Vì vậy, như bạn có thể thấy bây giờ, câu hỏi tưởng chừng như vô hại này thực sự có thể là một chủ đề khá phức tạp. Tôi tin rằng tôi đã đưa ra trường hợp của mình về lý do tại sao một câu hỏi phải khá cụ thể để có thể nhận được câu trả lời hoàn chỉnh giải quyết hoàn toàn cách một thành phần duy nhất của Windows có thể xác định các phần mở rộng tên tệp. Trong một vỏ hạt, không chỉ có một câu trả lời duy nhất cho Windows, vì Windows có nhiều thành phần hoạt động theo nhiều cách khác nhau. Hy vọng rằng tôi đã bắt đầu cho thấy điều đó và chỉ ra một số tài nguyên bổ sung hiển thị thông tin liên quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.