是否可以通过批处理文件列出当前PATH(环境变量)设置中可用的所有可执行文件?
我已经尝试了一段时间,但似乎找不到办法(我不是一批知识分子)。
如果您甚至可以链接到文章,也请提供帮助。 谢谢!
答案 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