使用 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
有没有办法用批处理文件列出当前 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