Перечислите все исполняемые файлы в любом из ПУТИ вашей среды с помощью пакетной службы

Есть ли способ перечислить все исполняемые файлы, доступные с вашим текущим параметром PATH (переменная среды), с помощью командного файла?

Я пытался какое-то время и, кажется, не могу найти способ (я не интеллектуал).

Помогите, пожалуйста, если можно хоть ссылка на статью может быть полезной. Спасибо!

разделить по разделителю пути и повторить выполнение dir %path_segment%\*.exe

diginoise 23.07.2018 18:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
633
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

на удивление просто:

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

%pathext% перечисляет все определенные расширения файлов, которые являются исполняемыми (.exe, .bat, ...), а where перечисляет все находки в %path%

Примечание: это синтаксис командной строки. Для использования в пакетном файле используйте %%a вместо %a.

Великий! Примечание: это также возвращает все исполняемые файлы в текущем рабочем каталоге ...

aschipfl 23.07.2018 19:02

@aschipfl, я полагаю, что сначала можно создать случайный каталог и записать компакт-диск в этот каталог. Или, может быть, установить системную переменную NoDefaultCurrentDirectoryInExePath.

Squashman 23.07.2018 19:47

В дополнение к уже предоставленному ответу и в результате комментария @ 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 это прекрасно!

sunny moon 18.08.2019 15:46

Альтернативой является использование исключительно собственных средств 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

Другие вопросы по теме