Как мне найти «{game} .exe» из данного списка папок? - PullRequest
1 голос
/ 02 февраля 2020

Допустим, у меня есть папка под названием "Игры". И все мои игры сохранены в этих папках.

Я хочу извлечь все двоичные файлы из всех тех папок, в которых запускаются мои игры. Здесь я не могу использовать никаких пусковых установок: Например, Steam / origin et c.

До сих пор мне удалось получить все двоичные файлы, существующие в этой папке. Но это все случайные двоичные файлы, смешанные с реальными двоичными файлами игры.

Есть ли способ извлечь из игры только двоичные файлы?

    '''
Finding binaries for games 
Eliminating other types of binaries, eg: uninstall.exe etc
''' 
def getStandalone(filePath = 'D:\\Games\\'):
    pattern = "*.exe"
    pattern2 = "unin*"
    for  root, dir, files in os.walk(filePath):
        for file in files:
            if(
                fnmatch.fnmatch(file, pattern) and 
                fnmatch.fnmatch(file, pattern) != 
                fnmatch.fnmatch(file, pattern2)
            ):
                print(file)

# print(getStandalone())

Мне удалось удалить "удалить" двоичные файлы, так как большинство из них начинаются с unin -

Но это очень грязный способ сделать это, и я бы предпочел извлечь двоичные файлы игры, чем удалить все остальные вещи.

Одна вещь возникла у меня в голове. Windows реестр. Но я понятия не имею, как go про "Поиск игр" в реестре. У меня есть куча старых игр, скопированных прямо с компакт-дисков. И они даже не установлены . Они просто существуют на моем диске. Так как же мне go найти их?

Ответы [ 3 ]

0 голосов
/ 02 февраля 2020

Вы должны использовать список известных исполняемых файлов игры. Как уже говорилось, многие игры могут встраивать несколько исполняемых файлов. Затем просто проверьте, есть ли у вас файл, соответствующий этому списку.

Ключи реестра не являются полностью надежными. Игры могут быть просто скопированы портативным способом, как любое другое портативное программное обеспечение.

0 голосов
/ 02 февраля 2020

Если вы просто хотите .exe файлы, вы можете сделать это, что должно быть достаточно быстрым и чистым.

Примечание : Там нет никаких гарантий в каталоге будет только один .exe файл. Это найдет всех из них. Поскольку вы упомянули, что явно не хотите uninstall.exe , вы можете обязательно добавить условную проверку, чтобы удалить только это, но если вы хотите удалить дополнительные файлы .exe, вам потребуются дополнительные параметры .

import os
'''
Finding binaries for games 
Eliminating other types of binaries, eg: uninstall.exe etc

''' 
def getStandalone(filePath = 'D:\\Games\\'):
    for dir in os.listdir(filePath):
        if os.path.isdir(os.path.join(filePath, dir)):
            bins = [file for file in os.listdir(os.path.join(filePath, dir)) if file.endswith('.exe') and not file.startswith('unin')]
            print(bins)

Вы также можете просто все это в едином понимании списка -

[file for dir in os.listdir(os.getcwd()) if os.path.isdir(os.path.join(os.getcwd(), dir)) for file in os.listdir(os.path.join(os.getcwd(), dir)) if file.endswith('.exe') and not file.startswith('unin')]
0 голосов
/ 02 февраля 2020

Самый глупый подход - предварительно определить список с известными именами исполняемых игр и использовать его для фильтрации результатов в files. Создание уважительного списка может занять больше времени, но ваши результаты будут очень точными.

Более умным подходом было бы go через каждый элемент в files, перечислить библиотеки DLL, загруженные этим приложением (и, возможно, перечислить библиотеки DLL этих библиотек) и отбросить элементы, которые не используют библиотеки DLL из DirectX или OpenGL. Однако при таком подходе могут возникнуть некоторые ложные отрицания: приложения, которые на самом деле являются играми, но не загружают эти библиотеки напрямую, будут помечены как неигровые.

Я не думаю, что установщики оставляют после себя специальный / стандартный ключ в реестре. Формат PE также не имеет специального флага, помогающего отличить игры от обычных двоичных файлов неигровых приложений.

В конце концов, я считаю, что это хорошее решение для этого. Проблема, вероятно, будет использовать несколько стратегий для фильтрации кандидатов в игру. Я просто предлагаю вам кое-что начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...