使用 Batch 列出任何环境路径中的所有可执行文件

List All Executables in any of your environment PATHs using Batch

有没有办法用批处理文件列出当前 PATH(环境变量)设置可用的所有可执行文件?

我已经尝试了一段时间,但我似乎找不到办法(我不是一个批处理知识分子)。

请帮忙,如果你能甚至 link 一篇文章是有用的。 谢谢!

出奇的简单:

for %a in (%pathext%) do where *%a

%pathext% 列出了所有已定义的可执行文件扩展名(.exe、.bat、...),where 列出了 %path%[=16= 中的所有结果]

注意:这是命令行语法。要在批处理文件中使用,请使用 %%a 而不是 %a

作为对已经提供的答案的补充,并且作为@aschipfl 评论的结果,以下应仅使用 %Path% 环境变量中定义的位置,而不包括当前目录,(除非它本身在 %Path% 中).

来自命令提示符:

For %A In (%PathExt%) Do @Where $Path:*%A 2>Nul

从批处理文件中:

@For %%A In (%PathExt%) Do @Where $Path:*%%A 2>Nul

显然,如果您只查找 .exe 文件而不是可执行文件,那会简单得多:

Where $Path:*.exe 2>Nul

另一种方法是单独使用 CMD 的本机功能而不依赖外部可执行文件,它也可以用于 windows 的旧版本,例如 Windows XP,其中 Where.exe 不可用。

在批处理文件中:

@echo off
setlocal DisableDelayedExpansion
for %%D in ("%PATH:;=";"%") do (
    for /F "eol=* delims=" %%F in ('cd /d "%%~D" 2^>nul ^&^& dir /b/a-d %PATHEXT:.=*.% 2^>nul') do (
        for %%F in ("%%~D\%%F") do echo %%~fF
    )
)

从技术上讲,最里面的 FOR 并不重要,它只是为了处理有时会在 PATH 环境变量中看到的异常情况,例如某些路径元素尾随反斜杠的地方,以以标准格式输出文件路径。

由于它的长度,它不太适合在命令提示符下使用,但是根据我的测试和我的肯定,它比 Where 的等效解决方案更快。

在命令提示符下使用的一行代码(为了完整起见):

@for %D in ("%PATH:;=";"%") do @for /F "eol=* delims=" %F in ('cd /d "%~D" 2^>nul ^&^& dir /b/a-d %PATHEXT:.=*.% 2^>nul') do @for %F in ("%~D\%F") do @echo %~fF