使用批处理列出任何环境PATH中的所有可执行文件

时间:2018-07-23 16:34:53

标签: batch-file cmd environment-variables command-prompt

是否可以通过批处理文件列出当前PATH(环境变量)设置中可用的所有可执行文件?

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

如果您甚至可以链接到文章,也请提供帮助。 谢谢!

3 个答案:

答案 0 :(得分:4)

非常简单:

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

%pathext%列出了所有已定义的可执行文件扩展名(.exe,.bat,...),而where列出了%path%内的所有发现内容

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

答案 1 :(得分:1)

作为已经提供的答案的补充,以及@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

答案 2 :(得分:0)

另一种选择是仅使用CMD的本机功能而不依赖外部可执行文件,这也可以在Windows Where.exe不可用的较旧版本的Windows上使用。

在批处理文件中:

@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