Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理列出任何环境路径中的所有可执行文件_Batch File_Cmd_Environment Variables_Command Prompt - Fatal编程技术网

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

Batch file 使用批处理列出任何环境路径中的所有可执行文件,batch-file,cmd,environment-variables,command-prompt,Batch File,Cmd,Environment Variables,Command Prompt,有没有一种方法可以通过批处理文件列出当前路径(环境变量)设置可用的所有可执行文件 我已经尝试了一段时间,但我似乎找不到一个办法(我不是批处理知识分子) 请帮助,如果你可以,甚至一个链接到一篇文章可以是有用的。 谢谢大家! 非常简单: for %a in (%pathext%) do where *%a %pathext%列出了所有已定义的可执行文件扩展名(.exe、.bat、…),其中列出了%path% 注意:这是命令行语法。要在批处理文件中使用,请使用%%a而不是%a作为已提供答案的补充,并

有没有一种方法可以通过批处理文件列出当前路径(环境变量)设置可用的所有可执行文件

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

请帮助,如果你可以,甚至一个链接到一篇文章可以是有用的。 谢谢大家!

非常简单:

for %a in (%pathext%) do where *%a
%pathext%
列出了所有已定义的可执行文件扩展名(.exe、.bat、…),
其中
列出了
%path%


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

作为已提供答案的补充,并且由于@aschipfl的注释,以下内容应仅使用
%Path%
环境变量中定义的位置,而不包括当前目录,(除非它本身在
%Path%
中)

在命令提示下:

对于(%PathExt%)中的%A执行@Where$Path:%A 2>Nul
并从批处理文件:

@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
    )
)
@对于(%PathExt%)中的%%A,执行@Where$Path:%%A 2>Nul

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

其中$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
    )
)
从技术上讲,的最里面的
并不重要,它只是为了处理
PATH
环境变量中有时可能出现的异常,比如某些PATH元素后面有反斜杠,以便以标准格式输出文件路径

由于它的长度,它不适合在命令提示符下使用,但是对于我的测试和我的确信,它比使用
Where
的等效解决方案要快

一个用于命令提示的行程序(为完整起见):


在路径分隔符上拆分并迭代执行
dir%path\u segment%\*.exe
Great one!注意:这也会返回当前工作目录中的所有可执行文件…@aschipfl,我想可以先创建一个随机目录,然后在该目录中制作CD。或者可以设置
nodefaultcurrentDirectoryinePath
系统变量。这是甚至比公认的答案更好,因为它发出一个连续的列表,没有中断。与
|find
|findstr
相结合,这太棒了!