Есть ли способ перечислить все исполняемые файлы, доступные с вашим текущим параметром PATH (переменная среды), с помощью командного файла?
Я пытался какое-то время и, кажется, не могу найти способ (я не интеллектуал).
Помогите, пожалуйста, если можно хоть ссылка на статью может быть полезной. Спасибо!





на удивление просто:
for %a in (%pathext%) do where *%a
%pathext% перечисляет все определенные расширения файлов, которые являются исполняемыми (.exe, .bat, ...), а where перечисляет все находки в %path%
Примечание: это синтаксис командной строки. Для использования в пакетном файле используйте %%a вместо %a.
Великий! Примечание: это также возвращает все исполняемые файлы в текущем рабочем каталоге ...
@aschipfl, я полагаю, что сначала можно создать случайный каталог и записать компакт-диск в этот каталог. Или, может быть, установить системную переменную NoDefaultCurrentDirectoryInExePath.
В дополнение к уже предоставленному ответу и в результате комментария @ 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
Этот даже лучше, чем принятый ответ, потому что он выдает непрерывный список без разрывов. В сочетании с | find или | findstr это прекрасно!
Альтернативой является использование исключительно собственных средств 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
разделить по разделителю пути и повторить выполнение
dir %path_segment%\*.exe