在 Windows 上,什么文件扩展名表示可执行文件?

Ken*_*Ken 24 windows file-extension filenames

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

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

find . -executable -type f
Run Code Online (Sandbox Code Playgroud)

我认为在 Windows 上,它似乎有一个更复杂的机制“这个可执行文件(以及我如何执行它)”,会有相对较少的文件扩展名,它们的用途大致相同。

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

Ken*_*ite 32

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

C:\>set PATHEXT
Run Code Online (Sandbox Code Playgroud)

在我的机器上,我得到了这个(WinXP):

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1
Run Code Online (Sandbox Code Playgroud)

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

  • 还有用于屏幕保护程序的 .SCR。它们可以(并且确实)包含屏幕保护程序的实际执行代码。它们只是不在 PATHEXT 中。 (5认同)
  • 此外,您可以添加更多 - 例如,添加 .py 以让“pyscript”运行“pyscript.py”! (2认同)
  • 这不是 PATHEXT 的用途。 https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/start。 PATHEX 只是当用户“执行”不带扩展名的文件名时要附加的替代扩展名的列表。 cmd.exe 将按顺序附加每个扩展名,直到找到匹配的文件,并且将像用户指定了该扩展名一样运行。 “执行该文件”的作用取决于特定的扩展名(包括不知道要做什么)。它的行为就像用户自己输入了扩展名一样。此搜索仅针对第一个标记(“命令”)进行 (2认同)

TOO*_*GAM 6

在 Windows 上,什么文件扩展名表示可执行文件?

表示什么?

我知道这个问题现在听起来可能有点令人困惑,但这个问题很重要。当我解释为什么它很重要时,问题就会变得更加清晰。

尽管Ken White对 PATHEXT 变量(在命令提示符的“环境”中)的回答是一个很好且简短的答案,并且该答案可能适合您,但答案并不完整。不完整的原因是正确答案因您尝试执行的操作而异。

例如,您可以尝试:

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

这些运行程序的方法中的一些可以使用不同的方法来确定可以支持哪些文件扩展名。特别是,使用 CMD 可能与运行菜单不同。

例如,Wes 令人费解的博客:自定义 Windows 运行命令...记录了正在检查的不同位置,包括注册表项。

答案可能还取决于所使用的 Microsoft Windows 版本。在 Windows 10 中,我只需在命令提示符处输入 zip 文件的名称,它就会打开 Windows 资源管理器。我似乎记得在 Windows XP 中不起作用(尽管在 Windows XP 中,我可以输入“start filename.zip”并获得相同的效果)。所以要么我的记忆有问题,要么微软一直在尝试在新版本的Windows中进行改进。(希望对我来说是后者。)

在 Windows 10 的传统命令提示符(运行“CMD”)中,当我转到 zip 文件的位置(使用“CD”命令)并键入“filename.zip”时,该文件将打开。当我转到该位置并输入“文件名”(省略“.zip”文件扩展名)时,Windows 找不到该文件。但是,如果我运行“ ECHO %PATHEXT%”,然后运行“ SET PATHEXT=%PATHEXT%;.ZIP”(然后ECHO %PATHEXT%再次运行“”,以确保获得所需的效果),那么我可以键入“文件名”,命令提示符将找到 .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
Run Code Online (Sandbox Code Playgroud)

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

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

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts /s
Run Code Online (Sandbox Code Playgroud)

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