Что нового

Может ли такое AutoIt:

Mihaj

Новичок
Сообщения
18
Репутация
0
Я не программист, только довольно продвинутый пользователь. Мне требуется понять, стоит ли влезать в AutoIt, что явно чревато для меня очень серьезными трудозатратами :(, ради решения собственно одной единственной, на данный момент, задачи (в том смысле, что пригоден ли вообще для нее AutoIt?). –
Требуется автоматизировать присвоение группе файлов (выбранных тем или иным образом, поддерживаемым AutoIt) указанных пользователем тегов, общих для всех выбранных файлов. Теги, здесь - одно из "новых" универсальных свойств некоторых типов файлов, поддерживаемых ОС начиная с Windows 10 (например, картинки (главное, фотки), видео, офисные документы, и наверняка много чего еще, о чем я не в курсе (не путать с MP3-тегами и т.п., что сейчас совершенно не интересует).
Беда в том, что при стандартном (интерактивном) присвоении тегов происходит сохранение файлов с изменением дат файлов. Что совершенно неуместно, так как хронология не менее важна для выполнения выборок файлов, чем теги, предназначенные ровно для того же (т.е., "одно лечим, другое калечим" ...). Поэтому, перед сохранением очередного файла необходимо считать и запомнить исходную дату файла, а после сохранения восстановить эту дату в атрибутах этого файла (ну, если только не существует возможность программно присвоить теги, не вызывая штатную процедуру сохранения, в чем я очень сильно сомневаюсь ...). Ну и затем, разумеется, переход к следующему файлу из списка ... Вот и всё ...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
или
 

Oki

Продвинутый
Сообщения
452
Репутация
62

joiner

Зачем сразу куда-то посылать? Топикстартер спрашивает совета, стоит ли ему влезать в AutoIt для описанной задачи, не грозит ли топикстартеру затея захода в тупик. Раздел "Общение" - вполне разумное место для этого.

Кстати, по себе могу сказать, что стоит лишь заняться какой-то одной задачей, как вскоре выясняется, что можно решать в AutoIt ещё много других полезных задач, поэтому багаж полученного опыта может оказаться полезным и на будущее. Но оценку возможности и трудности для продвинутого пользователя справиться с поставленной задачей (отдельно по возможности и по трудности) от людей, которые хорошо знают возможности языка и помнят свой тернистый путь (все когда-то рождаются глупыми), топикстартеру можно бы и получить.
 
Автор
M

Mihaj

Новичок
Сообщения
18
Репутация
0
Первый вариант было бы очень круто ... Но, возвращаясь к первоначальному вопросу. - Это можно понимать так, что в AutoIt такое определенно можно сделать, ... или все-таки, только "можно попробовать"?
Сообщение автоматически объединено:

стоит ли ему влезать в AutoIt для описанной задачи, не грозит ли топикстартеру затея захода в тупик. Р
Да, именно, и прежде всего чисто технически (я отправляя предыдущий пост, еще не видел Вашего коммента...). Собственно, можно существенно сузить вопрос:
  1. Располагает ли AutoIt функциями изменения значений атрибутов/свойств файлов вообще? (предполагаю - ДА)
  2. Доступны ли AutoIt все свойства файлов, представленные в форме "Свойства" 10-й Винды (по крайней мере те, которые могут редактироваться интерактивно)? (надеюсь на это)
  3. Интерактивный сценарий редактирования тегов предусматривает завершение в виде их явного сохранения (неявно - всего файла), что влечет изменение даты "редактирования" файла. Я в старттопике объяснил почему это неприемлемо. Было бы волшебно, если бы в AutoIt существовала возможность присвоение тегов в обход процедуры сохранения файла (но я, исходя из своих интуитивно-поверхностных представлений об объектной модели ОС, в это совсем не верю. Но чем черт Microsoft не шутит?...). Поэтому:
  4. Вероятно придется сначала сохранять файлы, а потом восстанавливать в них предварительно сохраненные значения исходных дат. Отсюда конкретный вопрос: AutoIt вообще занимается подобными вещами, или нет? Если "да", то это тривиальные задачи, или из области особых изощрений? - Если последнее, то мне и браться нечего, а если первое ..., то можно подумать ...
 
Последнее редактирование:

Prog

Продвинутый
Сообщения
537
Репутация
65
Располагает ли AutoIt функциями изменения значений атрибутов/свойств файлов вообще?
Функции взаимодейсия с файлами находятся в
Справка > AutoIt > Function Reference > File, Directory and Disk Managment.

Функция FileGetTime() читает время создания/модификации/доступа, а FileSetTime() записывает его.
Считываете время модификации в переменную, редактируете файл, записываете время из переменной в атрибуты файла.

Интерактивный сценарий редактирования тегов предусматривает завершение в виде их явного сохранения
Редактирование предусматривает чтение, модификацию и запись и вот тут столкнетесь с ограничением функции
FileOpen() - не умеет она открывать одновременно для чтения и записи. Самое интересное что винда такого ограничения не имеет.
 
Автор
M

Mihaj

Новичок
Сообщения
18
Репутация
0
столкнетесь с ограничением функции FileOpen() - не умеет она открывать одновременно для чтения и записи
Не знаю, не будет ли это оффтопом ... Почитал в Гугле. Мне показалось, эта функция вообще открывает файл только в роли текстового контейнера(?) Но мне то надо получить доступ к файлу, как "классу" с его свойствами ... Или как иначе добраться до нужного свойства файла? Или подразумевается что-то типа представления класса в виде структурированного текста (типа XML)?
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Но мне то надо получить доступ к файлу, как "классу" с его свойствами
Файл это массив бинарных данных. ООП это совсем другое.

Или как иначе добраться до нужного свойства файла?
У каждого типа файлов своя структура.

Или подразумевается что-то типа представления класса в виде структурированного текста (типа XML)?
В файле данные в формате XML?
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Редактирование предусматривает чтение, модификацию и запись и вот тут столкнетесь с ограничением функции
FileOpen() - не умеет она открывать одновременно для чтения и записи. Самое интересное что винда такого ограничения не имеет.
Используя FileSetPos(), можно считывать и записывать данные в один и тот же файл. В этом случае следует всегда вызывать функцию FileFlush() между каждыми операциями записи и чтения.
Сообщение автоматически объединено:

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

Prog

Продвинутый
Сообщения
537
Репутация
65
Используя FileSetPos(), можно считывать и записывать данные в один и тот же файл.
FileOpen() не позволяет открыть файл одновременно для чтения и записи. Это очень странное ограничение непонятно откуда взявшееся.
 

Oki

Продвинутый
Сообщения
452
Репутация
62
FileOpen() не позволяет открыть файл одновременно для чтения и записи. Это очень странное ограничение непонятно откуда взявшееся.
Насколько я помню, мой опыт говорит об обратном. Вот только сходу не припомню, как это делалось. Как-то связано с тем, что написано в справке по функции FileSetPos(). Не зря же там утверждается, что это возможно.
Используя FileSetPos(), можно считывать и записывать данные в один и тот же файл. В этом случае следует всегда вызывать функцию FileFlush() между каждыми операциями записи и чтения.
Если что, это была цитата из справки, а не формулировка из головы.

Впрочем, мы отклонились в сторону от потребностей топикстартера: ему требуется редактировать теги, а не содержимое.
 
Автор
M

Mihaj

Новичок
Сообщения
18
Репутация
0
Функции взаимодейсия с файлами находятся в
Справка > AutoIt > Function Reference > File, Directory and Disk Managment.

Редактирование предусматривает чтение, модификацию и запись и вот тут столкнетесь с ограничением функции
FileOpen() - не умеет она открывать одновременно для чтения и записи.
Спасибо за наводку на Справку. Просмотрел этот раздел и возникли кой-какие идеи ..., как, может быть, вообще обойтись без открытия файлов (ниже покажу)
Файл это массив бинарных данных. ООП это совсем другое.
ну, я не случайно "класс" взял в кавычки :smile:
В файле данные в формате XML?
нет-нет, там написано "(типа XML)" (для пояснения, что понимаю под "структурированным текстом")
Надо прежде всего проверить, влияет ли редактирование тегов системными функциями на даты модификации вообще. Ответ на этот вопрос несамоочевиден.
Верно, я выше то же самое пытался сказать : "3. < ... > Было бы волшебно, если бы в AutoIt существовала возможность присвоение тегов в обход процедуры сохранения файла (но я, исходя из своих интуитивно-поверхностных представлений об объектной модели ОС, в это совсем не верю. Но чем черт Microsoft не шутит?...)." :smile:

Так вот, в Справке меня заинтересовала функция GUICtrlSetOnEvent() (деталей я не понял). Вопрос, насколько гибко она работает с обработчиком, который штатно закреплен за данным элементом управления (например, кнопкой, я так понял(?)). В идеале, сценарий мог бы выглядеть так:

1. Пользователь, как обычно, выделяет в каталоге файлы, которым желает присвоить одинаковый тег(и).
2. Вызывает форму "Свойства", вводит в поле "Теги" желаемый текст. Если юзер среди выделенных файлов ошибочно указал файл, которому теги иметь не положено, то поля "Теги", согласно виндовому сценарию, в формочке просто молча не будет (и нас это не касается).
3. Нажимает кнопку "ОК" или "Применить". (На них, если это возможно, повешена GUICtrlSetOnEvent() пользовательская процедура, которая в нужные места штатной процедуры внедрила наши функции)
4. Открытие следующего файла из выделенных (начало цикла штатной процедуры)
5. ИсходноеВремя = FileGetTime() // наша функция
6. Сохранение файла, изменение даты файла (продолжение штатной процедуры)
7. FileSetTime(ИсходноеВремя) // наша функция
8. Возврат к п.4 (продолжение штатной процедуры)
... Но думаю, это слишком просто, чтобы было возможно :( ?
Сообщение автоматически объединено:

Прочитал Справку по AutoIt (ознакомился). На основании обретенных знаний более реалистичным кажется такой сценарий:
  1. Пользователь, как обычно, выделяет в каталоге файлы, которым желает присвоить одинаковый тег(и).
  2. Запускает наш скрипт.
  3. Скрипт проходит по выделенным файлам и собирает в таблицу (массив) ссылки на файлы и их даты.
  4. Потом открывает системное окно "Свойства". Если юзер выбрал негодный файл, то поля "Теги" в окне нет, - заканчиваем.
  5. если все в порядке, ждем пока пользователь введет в поле "Теги" значения и нажмет "ОК". Окно закроется.
  6. В файлах по таблице восстанавливаем даты.
Вопрос, способен ли AutoIt найти выделенные файлы (п.3) (из Справки не понял)?
 
Последнее редактирование:

avmaksimov

Новичок
Сообщения
46
Репутация
4
Всё можно сделать, только иногда лучше это сделать другим инструментов или вообще не делать)) выделенные файлы в Проводнике хотите найти?) Сложность понять, что за окно и как выдернуть оттуда. С виду там обычные ListView, в справке есть примеры. Сначала найдите окно, далее ищите компонент и т.д.

Но, мне кажется, если это нужно для вас (скорей всего), попробуйте воспользоваться файловым менеджером типа Unreal Commander или Double Commander и там можно с лёгкостью сделать кнопку и параметрами передавать выделенные файлы (в DC должно быть). Это будет более надёжным решением.
 
Автор
M

Mihaj

Новичок
Сообщения
18
Репутация
0
Всё можно сделать, только иногда лучше это сделать другим инструментов или вообще не делать))
Совершенно верно, и я честно в самом начале сказал, что хочу понять, подходит ли мне AutoIt. Спасибо за наводку на Unreal Commander и Double Commander, обязательно посмотрю. Я уже пытался разузнать что-н про Total Commander, ... но, опять же, не хватает квалификации. AutoIt пока кажется проще ... По крайней мере, есть очень качественная Справка, благодаря которой, мне кажется, я уже понял хотя бы концепцию. В общем, AutoIt я уже скачал, но до установки еще не созрел
Вопрос, способен ли AutoIt найти выделенные файлы (п.3) (из Справки не понял)?
Ну вот, благодаря добрым людям, получил положительный ответ на этот ключевой вопрос. Всем спасибо и +
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
стоит ли влезать в AutoIt
Стоит, просто стоит, однозначно стоит. Это всегда окупиться в любой области, логическое мышление.

Вопроса не понял, у файла нет тегов, есть атрибуты, и не любые а определены системой конкретно. Максимум во второй поток можно тегов накидать, но кроме вас о них никто знать не будет. XML - это уже область данных, это не предмет определения файла. В файл вы можете писать всё что вам заблагорассудится хоть теги, хоть не теги. Но вам тогда надо определить формат ваших данных в файле.
 
Автор
M

Mihaj

Новичок
Сообщения
18
Репутация
0
у файла нет тегов,

Вы наверное не в курсе. Вот какие теги я имею ввиду:
скринСвойстваТеги.png
Они имеются также и у офисных файлов (Ворд, Эксел, PPT...), наверняка и у других, о которых я не знаю
 
Последнее редактирование:

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Это относится к содержимому файла, но не к файловой системе. В таком случае надо искать модуль EXIF или изучать где это расположено в файле (позиция, длина полей или маркеры). Офисные документы это архив, надо извлечь его и искать в каком месте хранятся эти данные и в каком формате, или искать готовые модули. Что-то типа такого. Посмотри _WordDocPropertyGet() в справке, там параметр "(4) "keywords" Ключевые слова" - возможно это и есть теги. Но в этом случае требуется установленный офис на компьютере где требуется искать теги.
 
Автор
M

Mihaj

Новичок
Сообщения
18
Репутация
0
Это относится к содержимому файла, но не к файловой системе. В таком случае надо искать модуль EXIF или изучать где это расположено в файле (позиция, длина полей или маркеры).
Если это и так, то системная форма "Свойства" сама делает это. С её помощью пользователь без нашего участия управляется с тегами. Главное, что благодаря этим тегам мы можем систематизировать файлы на самом верхнем (универсальном) уровне нашего хранения данных. Нам требуется только восстановить даты всуе покалеченных при этом файлов (нейтрализовать порождаемую MS порчу – хронологическая (историческая) достоверность слишком ценна сама по себе, чтобы с этим мириться ...). Я не прав?
Кстати, в EXIF тегов по-моему как раз нет, а в MP3 теги есть, но они отсутствуют в форме "Свойства" ... , но, повторю, это неважно, поскольку я вообще не предполагаю что-н делать с тегами – только с датами ... Цель – только дать возможность их (теги) полноценно (безопасно) использовать.
 
Последнее редактирование:
Верх