Поиск всех .exe файлов в системе

Стоит задача написать скрипт, который будет проходить по файловой системе и записывать в список название файла с расширением .exe.

import os    
lst = []
    items = os.walk(f"C:/")
    for i in items:
        for k in i:
            if type(k) == str:
                if k.split(".")[-1] == "EXE" or k.split(".")[-1] == "exe":
                    app_window.current_item_label.setText(f"Файл: {k}")
                    lst.append(k)
            elif type(k) == list:
                for j in k:
                    if j.split(".")[-1] == "EXE" or j.split(".")[-1] == "exe":
                        app_window.current_item_label.setText(f"Файл: {j}")
                        lst.append(j)

Для достижения желаемого была использована библиотека "os" и функция "walk". На выходе я получаю список с 6184 названиями файлов, но было замечено, что функция проходит не по всей файловой системе, первоначально она обнаруживает перечень папок, приведенный ниже.

('C:/', ['$Recycle.Bin', '$WinREAgent', 'Config.Msi', 'Documents and Settings', 'Drivers', 'MSOCache', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'System Volume Information', 'Users', 'WCH.CN', 'Windows'], ['DumpStack.log.tmp', 'hiberfil.sys', 'pagefile.sys', 'swapfile.sys'])

Проблема состоит в том, что я не могу вытащить названия файлов из папок Users, Program Files, Program Files (x86), до них функция попросту не доходит.


Ответы (1 шт):

Автор решения: Nonen_Hook

Нужно рекурсивно проходить по всем внутренним каталогам и искать фалы таким образом:

import os
import glob

directory = "С:\\"

files = []
for root, dirs, file in os.walk(directory):
    for f in glob.glob(os.path.join(root, "*.exe")):
        files.append(f)

for file in files:
    print(file)

Имейте в виду, что скрипт должен быть запущен от имени администратора, чтобы получить доступ ко всем каталогам и файлам

→ Ссылка