在Windows上,哪些文件扩展名表示可执行文件?


17

在Windows上,*。exe,*。bat,*。cmd和* .com都表示可以运行的程序或Shell脚本,只需双击它们即可。是否有其他文件扩展名指示文件是可执行文件?

编辑:当我跳入一个新项目(或回到一个旧项目!)时,环顾四周我想做的一件事是找出有哪些工具。在Unix(我已经使用了数十年)上,有一个执行位,所以这很简单:

find . -executable -type f

我发现在Windows上,“它是可执行文件(以及我如何执行该文件)”似乎具有更为复杂的机制,因此文件扩展名的数量相对较少,其用途大致相同。

对于我当前的项目,*.exe *.bat *.cmd几乎可以肯定就足够了,但是我想问一下是否有权威列表。

Answers:


26

基本的“可执行”文件(Windows希望通过PATH执行的文件)存储在称为PATHEXT的环境变量中。您可以从命令提示符中看到以下内容:

C:\>set PATHEXT

在我的机器上,我得到以下(WinXP):

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

这不是排他性列表。Windows也将执行其他文件(例如,屏幕保护程序的扩展名为.scr,并且是可执行文件);Windows也将允许执行其他文件扩展名,但是上面列出的是默认的可执行文件扩展名。


1
辉煌的发现!
barlop 2011年

1
此外,您还可以添加更多内容-例如,添加.py以使“ pyscript”运行“ pyscript.py”!
Phoshi 2011年

@Phoshi但是有了.py,那么您将转到第三方,而且没有止境
barlop 2011年

@barlop; 确实我是,但是,如果与该问题相切,那么知道这是一件有用的事:)
Phoshi 2011年

5
还有用于屏幕保护程序的.SCR。它们可以(并且确实)包含屏幕保护程序的实际执行代码。他们只是不在PATHEXT中。
sinni800

2

安装程序常见的一种是.msi


3
实际上,它实际上不是可执行文件格式,而是脚本格式,因为它仍然需要由解析msiexec.exe
Hello71 2011年

@ Hello71:你真的12岁吗?
paradroid

@paradroid:不,他真的不是。看他的写作风格。
studiohack

@paradroid:真的重要吗?
Hello71 2011年

@studiohack:那是我感到困惑的地方。@ Hello71:是的,的确是这样,因为如果您是,您会吓到我。
paradroid 2011年

2

.vbs是一个脚本。和.js

但是,如果您知道一些历史,那么您将能够更好地结合实际情况。我想,如果我没有使用计算机的时间很长,我可能还会着重于了解哪些扩展是可执行文件。。因为它们非常令人兴奋,而且看起来很基础。我想它们是..但是请注意随着时间的流逝,.COM在DOS之后消失了很多,我主要认为这应该是在Windows 9x中的command.com shell中。也许旧的NT经常使用它们。脚本.. vbs可能是在win9x左右出现的..所以出现了新的脚本。ps1比vbs还要新。

.COM很老..我不确定Windows XP示例是否依赖于任何.COM文件。但我猜它对旧版应用程序有更多的command.com。

.BAT是DOS时代的脚本..back。至今仍在使用。.VBS更加现代,但是.BAT仍然被使用,并且不会在不久的将来不被淘汰,人们明智地使用了两者。我没有使用过.CMD,但可能与任何东西都没有太大不同。有ps1(powershell。这比vbscript更现代)如果我们在宽松的意义上谈论脚本,则有.REG

实际上,术语“可执行文件”仅适用于EXE和.COM(.COM基本上已经绝迹了。更多是win9x的东西(win9x中的命令提示符为command.com,没有cmd.exe)),而COM文件是DOS的东西。但是不是NT的CMD,例如NT的命令外壳是cmd.exe,尽管如上所述,NT中有一个command.com,我猜是用于遗留应用程序,但NT很可能不依赖它)

.MSC例如:start..run..services.msc它们不是可执行文件。我想它们是一种脚本。.services.msc似乎是用xml编写的。对于非系统性事物,例如说HTML页面是一个'cos,它们像脚本一样被解释。但是不是由操作系统来的.. .CPL不是脚本..在记事本中查看它们。人们倾向于不将它们视为可执行文件或脚本,也许因为只有MS开发人员才能编写它们。(或者如果其他人这样做,那是非常罕见的!)


不幸的是,添加.MSCPATHEXT不允许您在不添加扩展名的情况下运行MMC管理单元(例如services而不是services.msc)。:-(
Synetech

@Synetech,因为已经有一个services.exe
kinokijuf

@kinokijuf,是的;如果您diskmgmt命令提示符运行(不带扩展名),它将起作用,但是运行services将不起作用。但是没有他们,如果你尝试从运行它们将工作运行对话框中没有.msc扩展,尽管全系统pathext变量包含.msc
Synetech

2

在Windows上,哪些文件扩展名表示可执行文件?

代表什么?

我知道这个问题目前听起来有些混乱,但是这个问题很重要。当我解释其重要性时,问题将变得更加清晰。

尽管Ken White对PATHEXT变量的答案(在命令提示符的“环境”中)是一个很好的简短答案,并且该答案可能对您很有效,但答案并不完整。不完整的原因是,根据您要执行的操作,正确答案会有所不同。

例如,您可以尝试:

  • 通过输入完整文件名,从“传统命令提示符”(“ CMD”)运行程序
  • 通过键入基本文件名,但保留其扩展名,从“传统命令提示符”(“ CMD”)运行程序
  • 使用内置在“传统命令提示符”(“ CMD”)中的“开始”命令
  • 从PowerShell运行程序
  • 从开始菜单上的“运行”菜单项运行程序
  • 通过尝试双击与以扩展名结尾的文件相关的图标,从资源管理器运行程序
  • 告诉Microsoft Internet Explorer打开下载的文件
  • 使用Microsoft Windows API中的函数运行程序。(这是最终用户通常不执行的操作,但是计算机程序员可以执行此操作,因此信息与他们相关。)

这些运行程序的方法中的某些方法可能会使用不同的方法来确定可能支持的文件扩展名。特别是,使用CMD可能不同于“运行”菜单。

例如,Wes令人困惑的博客:Customizing Windows Run Command ...记录了要检查的不同位置,包括注册表项。

答案还可能取决于所使用的Microsoft Windows版本。在Windows 10中,我只是在命令提示符下键入了一个zip文件的名称,然后打开了Windows资源管理器。我似乎记得在Windows XP中不起作用(尽管在Windows XP中,我可以键入“ start filename.zip”并获得相同的效果)。因此,要么我的内存出现故障,要么Microsoft一直在尝试对Windows的较新版本进行改进。(希望对我来说是后者。)

在Windows 10的传统命令提示符(运行“ CMD”)中,当我转到一个zip文件的位置(使用“ CD”命令)并键入“ filename.zip”时,该文件将打开。当我转到该位置并键入“文件名”(不使用“ .zip”文件扩展名)时,Windows找不到该文件。但是,如果我先运行“ ECHO %PATHEXT%”,然后运行“ ” SET PATHEXT=%PATHEXT%;.ZIP(然后ECHO %PATHEXT%再次运行“ ” ,以确保达到预期的效果),则可以键入“ filename”,命令提示符将找到.ZIP文件。因此,这就是%PATHEXT%变量的作用。

您可以通过运行ASSOC命令来查看其他扩展名列表。例如,运行该命令将显示多行输出,包括以下内容(在我的系统上)-“ .zip=CompressedFolder”。然后,通过键入“ FTYPE | FIND /I "CompressedFolder"” 可以看到运行的内容。(这是传统命令行的意思。PowerShell不会喜欢那些未转义的引号。)(如果您只键入“ FTYPE”而不使用该命令行的其余部分,则会看到更多有关其他扩展名的输出。)

如果我ASSOC | FIND /C "."在Windows 10计算机上键入“ ”,那么当我以这种方式检查文件关联时,我发现输出339行。

MS KB 162059全部与调整Internet Explorer打开Office文档的方式有关。

因此,询问默认可执行文件列表太含糊。Microsoft Windows的不同组件可能使用不同的资源,因此,对于准确的答案,该问题需要更具体。

这个问题确实提到了使用资源管理器双击图标。要查看该程序使用的可执行文件列表,我相信您将需要签出注册表。您可以从命令提示符运行此命令:

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

(我不在这里列出它们。在Windows 10计算机上有286个。)

那列出了扩展名。要查看更多信息,包括有关扩展的详细信息:

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

因此,如您现在所见,这个看似无害的问题实际上可能是一个非常复杂的话题。我相信我已经阐明了为什么一个问题应该非常具体,以便能够获得完整的答案,从而完全解决Windows的单个组件如何确定文件扩展名的问题。简而言之,对于Windows而言,并不是只有一个答案,因为Windows具有多个行为不同的组件。希望我已经开始证明这一点,并指出了一些其他可以显示相关信息的资源。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.