Предисловие: С некоторых пор в Windows 10 появилась очень долгожданная фича – возможность присваивать Теги файлам некоторых особо востребованных типов, и использовать их для быстрого выполнения выборок.
Предисловие 2. … И все бы, наконец, стало хорошо, но в "лучших" традициях мелкомягких (MS), вопрос чуть-чуть не додумали … Выполнение штатной процедуры присвоения тегов влечет изменение даты модификации файла. – Уж точно, не менее значимого параметра и для выборок, и для сортировки файлов, и не только, чем теги. Если в случаях с одиночными файлами это еще можно пережить, вручную возвращая атрибут даты в на-зад (если вовремя заметил и предусмотрел), то для систематического использования такая благодать совершенно неприемлема. Отсюда, острое желание это положение дел решительно изменить.
Что имеем сейчас - существующий сценарий присвоения тегов группе файлов:
(почти "Технические требования" )
Примечания:
Это нужно в дополнение к изначальной возможности классификации данных (файлов) на компьютере по пользовательским категориям используя каталоги (директории, папки), которая позволяет жестко связать объект только с одной тематической группой, в то время, как очень часто объект логически связан одновременно с несколькими или многими темами. Теги позволяют, практически не усложняя ни систему, ни эргономику, связывать объекты, теоретически, с любым количеством категорий/тем. Не следует путать это с узко специальными, например, MP3-тегами, которые, к тому же, работают только при наличии весьма весомого специального ПО. – Общесистемные теги позволяют логически объединять данные (файлы, объекты) разных типов. Да, давно существуют другие способы преодолевать это ограничение файловой системы ОС, например, ярлыки(линки), мягкие, жесткие, но в сравнении с общесистемными тегами это лишь довольно неудобные ограниченные костыли …
Что имеем сейчас - существующий сценарий присвоения тегов группе файлов:
- В файл-менеджере выделяем файлы, которым нужно присвоить одинаковые теги.
- Вызываем формочку "Свойства". В ней переходим на вкладку "Подробно".
Если для всех типов выделенных файлов предусмотрено системное свойство "Теги", то находим его в списке свойств, если среди выделенных файлов имеется хоть один, для типа которого такое свойство не положено, то в списке свойств этого свойства нет … Если есть, то вводим нужные теги. А если нет, то жмем "Отмена" и смотрим что мы там навыделяли … И вызываем формочку снова … - По нажатию кнопки "ОК" формочка закрывается, файлы пересохраняются, и дата-время модификации у них меняется на текущее.
(почти "Технические требования" )
- Пользователь выделил в файл-менеджере файлы, которым нужно присвоить одинаковые теги. (В каком файл-менеджере, в Windows или в Total Commander, в принципе без разницы, но лично я предпочел бы второй.)
- Нажал нашу командную кнопку, или пункт меню, или "горячую клавишу" "Теги", которая запускает наш скрипт.
- Скрипт проходит по выделенным файлам и собирает в таблицу (массив) ссылки на файлы и их существующие даты-время. Здесь пример кода, в котором, помимо прочего, производится поиск выделенных файлов. Дату-время каждого найденного файла видимо должна добыть функция FileGetTime(). Затем
- (скрипт) открывает штатную форму "Свойства" (см.спойлер выше). Проверяет, есть ли в ней свойство "Теги" (теги всегда располагаются во вкладке "Подробно", в разделе "Описание", но раздел "Описание" не всегда является первым). Если этого свойства нет, то скрипт заканчивает работу (дальше не наше дело), а если есть, то ждет, когда пользователь нажмет "ОК", и завершится системная процедура сохранения файлов.
- После завершения сохранения, скрипт проходит по записанным в памяти файлам и восстанавливает в них записанные атрибуты "дата-время", вероятно, с помощью функции FileSetTime().
Примечания:
- Версию AutoIt не указал, так как я его пока не устанавливал. Но я пробовал выставить в Total Commander простейшую кнопку, сработанную в AutoIt, и она заработала. И это был скрипт, а не экзешник. Может Тотал "от природы" на это способен?
- Во время предварительного обсуждения было озвучено предположение, что, возможно, с помощью скрипта можно присвоить файлам теги в обход штатной процедуры сохранения, которая портит даты, и тогда не нужны были бы операции перезаписи даты-времени. Но, во-первых, очень сомнительно, что это возможно (любопытно бы конечно проверить, если кто-н умеет), а во-вторых, тогда, наверное, пришлось бы делать собственную форму для ввода тегов, а в системной форме не такая уж простая логика работы поля "Теги" (там обеспечивается подтягивание уже существующих тегов по первым символам, автоматическая вставка разделителя – … это объективно очень полезно, чтобы минимизировать размножение тегов из-за случайных различий в написании).
- Предвижу возможность возникновения необходимости заменить все существующие теги выбранных файлов на новые. Интерактивно это сделать невозможно. Но, на первый взгляд, программно это можно реализовать.
- Также возможна ситуация, когда все теги у выделенных файлов нужно удалить. Если у этих файлов разные теги, то это сейчас также сделать невозможно. Но, кажется, программно и это можно реализовать.
- Чтобы реализовать последние две возможности, необходимо предоставить пользователю опции для указания его намерений. Это можно сделать в виде группы из трех радиобатонов, для явного указания режима редактирования тегов (стандартный(добавление), замена всех, удаление всех). Но тогда, наверное, нужно делать для них специальную форму, на которой тогда будет находиться и кнопка вызова собственно формы "Свойства". В этом случае, заодно, можно добавить и опции манипуляции с датой (указать определенное значение, или вообще заказать ничего не делать). Но это всё можно добавить позже, если получится основное и будет сильная потребность …