Как то мой друг попросил меня написать небольшое приложение для Windows, в формате explorer shell extension, для создания отчета по выделенным файлам или папкам (с рекурсией), по произвольно заданному шаблону.

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

В дальнейшем я потратил еще часок, чтобы выложить эту программу (в исходных текстах, и в виде готовой инсталляции) на GitHub и создать простое, но весьма подробное описание.

Приложение работает на Windows OS от Windows XP до Windows 10 и чрезвычайно просто как в использовании, так и конфигурировании под Ваши нужды.

Для установки достаточно скачать содержимое папки Install на Ваш PC, и запустить файл install.cmd. После чего в контекстном меню Explorer-а, при выделенном файле или папке, должно появиться новое меню:

image

В данном меню будут отображены все текущие шаблоны для вывода, лежащие в папке, откуда было запущено расширение.

При клике на необходимом шаблоне (в суб-меню), практически моментально мы получим и сам отчет (автоматически запустится notepad.exe):

image

image

Для удаления расширения достаточно запустить файл uninstall.cmd.

Мой друг уверил меня, что он не нашел программ с подобной функциональностью; надеюсь, что это приложение кому-нибудь да пригодится!

Переменные для включения в шаблон описаны на главной странице проекта и не требуют особых пояснений. Исходный код (я надеюсь) прост и ясен, используйте и модифицируйте для Ваших нужд.

Приятного сканирования!
Поделиться с друзьями
-->

Комментарии (27)


  1. NeoCode
    11.01.2017 18:51
    +2

    Я подобную программу (только консольную утилиту под DOS) делал очень давно когда учился в институте, с целью просканировать многочисленные сетевые диски университетской сети на предмет интересного (исходники, электронные книги и мануалы, софт...). Интернет тогда был dial-up 5 часов 100 рублей на месяц, флэшек не было — только дискеты, поэтому утилита весьма помогала: можно было дома в спокойной обстановке посмотреть содержимое этих дисков и решить что качать и в каком объеме, чтобы при следующем посещении компьютерного класса не рыться а сразу приступить к делу.


  1. Garrett
    11.01.2017 18:51
    +2

    Но всё же избегайте использование managed языки для написания in-process Shell Extension для Explorer'а.
    Do not write in-process shell extensions in managed code
    Лучше всё же на c++


    1. sens_boston
      11.01.2017 19:08

      Вся работа собственно с shell-ом базируется на проекте SharpShell, достаточно стабильном и отработанном. Не могу утверждать наверняка, но, как мне кажется, статья 10-летней давности, которую Вы привели, уже не актуальна.

      Лично сам я этим приложением не пользуюсь, но мой друг никаких багов или неприятных side effects за все время эксплуатации не обнаружил.


      1. rg_software
        12.01.2017 02:25

        В статье специально "update 2013" есть.


        1. sens_boston
          12.01.2017 05:59

          Автор SharpShell-а тоже ссылается на пару статей с msdn. Ну, и самое главное: все прекрасно работает, в этом Вы можете легко убедиться сами.


  1. Almet
    12.01.2017 18:12

    Вот если бы еще графики объемов хранимых данных подключить, было бы шикарно


    1. sens_boston
      12.01.2017 18:24

      Немного не понял, какие графики Вы имеете ввиду (мы, все-таки, имеем дело с текстом — как отображать, псевдографикой?), но, если Вам это действительно нужно, создавайте тикет на гитхабе с подробным описанием, обсудим…


      1. Almet
        13.01.2017 15:26

        Я имел ввиду объем данных, хранимых в каталогах, иногда просто удобно график посмотреть, какая из директорий занимает много места


  1. undefined7
    12.01.2017 18:12

    спасибо за софтину


    1. sens_boston
      12.01.2017 18:27

      Пожалуйста, пользуйтесь на здоровье! Рад, что кому-то пригодилось (собственно, только для этой причины и публиковался этот обзорчик); надо будет еще парочку своих маленьких, но полезных проектов опубликовать.

      P.S. На github-е/codeplex-е, вообще-то, лежит огромное количество полезных, хороших и бесплатных программ. Проблема, собственно, найти необходимое.


  1. tapfor
    12.01.2017 18:12

    не совсем понятно, зачем в информации о папке в xml файле дважды указан размер (86.5GB… 86.5GB)?


    1. sens_boston
      12.01.2017 18:18

      Шаблоны вывода, идущие с программой, предоставлены только для демонстрационных целей. Видимо, я просто ошибся.


  1. vadimpl
    12.01.2017 18:12

    не нашел программ с подобной функциональностью
    была когда-то CFi ShellToys. Очень помогала получать в нужном виде инфо по файлам/папкам


    1. sens_boston
      12.01.2017 18:21

      Вполне возможно, но мой друг не смог найти в свое время, или, возможно, функциональность была не совсем такой, как ему было нужно. К тому же (погуглил эти Cfi ShellToys), эта утилита была платной, вроде?
      А тут бесплатный аналог, да еще и open source :)


      1. vadimpl
        12.01.2017 21:18

        Да, платная. Но возможностей у неё всё-таки поболее будет.


        1. sens_boston
          12.01.2017 21:26

          А каких не хватает, можете перечислить? Или лучше даже открыть тикет на гитхабе: если смогу, то выберу время и реализую.


          1. vadimpl
            12.01.2017 21:52

            Не, спасибо; уже пару лет назад бросил всё это.
            В программерстве ноль, поэтому изобретал велосипеды для своего увлечения — были большие пачки фото, которые постил на (сегодня помирающем) panoramio. В качестве промежутка (базы) использовал Excel, куда и надо было вбить данные фото. Вот этот ShellToys и сильно выручал. Путём несложных манипуляций список фото (сотни штук за поездку) из текстового вида, сгенерированного ShellToys, приобретал такой монструозный вид, где в первых столбцах были номер фото, дата, время (остальное уже ручками + формулами).


  1. soulruins
    13.01.2017 18:02

    Программка полезная, но PowerShell же может. Как пример для одной (корневой) папки:

    Get-ChildItem -Recurse | Measure-Object -Property Length -sum
    


    На выходе получим что-то вроде:

    Count : кол-во файлов
    Average :
    Sum : общий размер в байтах
    Maximum :
    Minimum :
    Property : Length


    Тут выше писали про графики, так вот к этому можно прикрутить модуль «Import-Excel», который автоматически при экспорте в Excel ещё и графики по полученным данным построит.


    1. sens_boston
      13.01.2017 20:23

      Программка полезная, но PowerShell же может.

      Ну, может то он может, но немного не то. Думаю, чтобы получить «то» (в точности такой же отчет, как и у File System Scanner — а именно в создании отчета по заданному шаблону и состоит функциональность программы), то PowerShell скрипт для этого будет куда сложнее моего C# кода. Ну, по удобству использования скрипты безусловно проигрывают shell extension.


  1. rvt
    13.01.2017 20:15

    Странно — скачал, запустил install.cmd. Уходит в бесконечный цикл. Я попытался это мелькание как-то прервать, получилось. Но выскочило сообщение, что нет файла сценария getadmin.vbs.


    1. sens_boston
      13.01.2017 20:17

      getadmin,vbs — это PowerShell скрипт, создающийся в %temp%-е, для повышения привилегий.

      Можете просто из elevated command prompt (Run as administrator) выполнить команду: srm.exe install FileSystemScanner.dll -codebase


  1. qw1
    15.01.2017 16:26

    На такую мелочь писать целую программу )))

    Я в подобных случаях (когда нужно снять слепок файловой системы) просто выполнял команду dir /a /s > file.txt

    Для просмотра был простой скрипт к Far, который разбирал этот список как архив (выдавал «оглавление архива», чтобы можно было в file.txt зайти, как в архив), можно было неспешно ходить по каталогам, оценивать вес отдельных файлов и каталогов.

    Потом обнаружил, что я не один такой, и есть более стабильный плагин ls -lR


    1. sens_boston
      15.01.2017 18:51

      На такую мелочь писать целую программу )))
      Я в подобных случаях (когда нужно снять слепок файловой системы)

      Вы неверно понимаете предназначение программы: дело отнюдь не в «слепке файловой системы».


      1. qw1
        15.01.2017 20:10

        Конечно, ведь вы не написали, для каких целей ваш друг использует программу.
        Я написал комментарий под влиянием коммента NeoCode, т.к. сам встречался именно с таким способом использования.


        1. sens_boston
          15.01.2017 21:30

          Все очень просто: мой друг использует эту программку для генерации контента для веб-серверов и сервисов, где, по определенным причинам, модификация кода (например, для динамической генерации подобных отчетов) невозможна. По его словам, использование этой утилиты сократило время, затрачиваемое обычно на проведение таких работ, на 99% :)

          Я понимаю, что звучит это не очень «технологично», и может быть достигнуто кучей иных способов, но, в данном случае, это оказалось практически единственное удобное и приемлемое решение.


  1. perfect_genius
    15.01.2017 22:34

    А можно как-нибудь поддержку русского? Где там добавить «L»? =)


    1. sens_boston
      16.01.2017 03:18

      Просто сохраняете файл шаблона в кодировке UTF-8, все.