Страница 7 из 7

Добавлено: Ср окт 02, 2019 10:43
Flasher
timson писал(а):Имя файла это время модификации вида-2019-08-01-10h23m45.
Т.е. это ответ на вопрос?
Flasher писал(а):Может, и у *.mp4 совпадает?
Так и в чём проблема с сортировкой по дате модификации? А если у jpg/mp4 один формат имени, то и по нему сортировка вполне уместна.

Добавлено: Ср окт 02, 2019 10:58
timson
Да это и есть ответ на вопрос, какое поле я хочу заполнить в свойствах файла-подробно.
По времени модификации не получится сортировать, так видео файлы находятся вместе с jpg файлами-фотографии.
А задача , что бы по сортировке по тегам вывести файлы фотографий и видео за одну и ту же дату.
К примеру фото сделано 15 сентября 2019 года, теги прописываются автоматизацией , которую Вы давно подсказали. И есть видео сделанное в эту же дату, что бы они находились рядом друг с другом. При просмотре из проводника.

Добавлено: Ср окт 02, 2019 12:04
Flasher
timson писал(а):По времени модификации не получится сортировать, так видео файлы находятся вместе с jpg файлами-фотографии.
Как это не получится, если дата соответствует имени?
timson писал(а):При просмотре из проводника.
Вы читаете, что вам модератор пишет?

Добавлено: Ср окт 02, 2019 13:40
Avada
timson
Чтобы такие файлы находились в TC рядом друг с другом по какому-то признаку, должен быть создан пользовательский набор колонок, использующий для одной из колонок WDX-плагин, который способен отобразить в колонке этот самый признак (поле плагина). (Для выбора плагина рекомендуется поиск по exif на этой странице.) Никаких иных способов сортировки вы в ТС не получите, а аналогии с Проводником бессмысленны — это другая программа. И к автоматизации это, вообще говоря, уже не относится.

Добавлено: Чт окт 02, 2025 15:26
Monarch-LFV
Уже год как Exiftool поддерживает географическую геолокацию по GPS координатам в EXIF данных, то есть имеет встроенную базу данных населенных пунктов всего мира, что позволяет пр помощи такой команды в командной строке (BAT-файл):

Код: Выделить всё

@exiftool %1 -charset filename=Cyrillic -api geolocation "-geolocation city*" "-geolocation region*" "-geolocation country*" "-geolocation Distance*" 2>nul
@pause>nul
Выводить информацию, например, такого вида:

Код: Выделить всё

Geolocation City                : Petropavlovsk-Kamchatsky
Geolocation Region              : Kamchatka
Geolocation Country Code        : RU
Geolocation Country             : Russia
Geolocation Distance            : 1.98 km
Но не знаю как прописать в Config.txt плагина ExifToolWDX.wdx, для получения этих данных в колонки TC. Может кто подскажет?

Добавлено: Сб окт 04, 2025 13:01
Orion9
Monarch-LFV
Если с плагином ничего не получится, можно попробовать извлечь данные через Autorun или WinScriptAdv. Алгоритм не должен быть сложный. В теории можно из любой консольной утилиты вытянуть что угодно, если заранее известен формат вывода.
Пример на Autorun:

[cut]

Код: Выделить всё

Pragma AutorunPluginFields "GeoCity:::ExifGeoData" "GeoRegion:::ExifGeoData" "GeoCountryCode:::ExifGeoData""GeoCountry:::ExifGeoData" "GeoDistance:::ExifGeoData"

Global gExifDir = COMMANDER_PATH & "\Plugins\wlx\ExifToolView\"
Global gExifExe = gExifDir & "exiftool.exe", gExifParam = '-charset filename=Cyrillic -api geolocation "-geolocation city*" "-geolocation region*" "-geolocation country*" "-geolocation Distance*"'

Global gGeoOut = List(), gGeoData = List("", "", "", "", "")
Global gGeoList = List("Geolocation City", "Geolocation Region", "Geolocation Country Code", "Geolocation Country", "Geolocation Distance")

Func ExifGeoData(FileName, FieldIndex, UnitIndex)
    Static lst, dat, idx
    If StrPos(FileGetAttr(FileName), "D") Then Return          
    If FieldIndex = 1 Then
       gGeoOut.Count = 0       
       gGeoOut.Text = ProcessExecGetOutput(FileName, gExifExe  gExifDir)
       For idx = 0 To gGeoData.Count - 1
           gGeoData[idx] = ""
       Next
       For geo In gGeoOut
           If StrPos(geo, ":") Then 
              lst = StrTrim(StrPart(geo, ":", 1))
              dat = StrTrim(StrPart(geo, ":", 2))
              idx = gGeoList.IndexOf(lst)
              If idx <> -1 Then gGeoData[idx] = dat
           EndIf
       Next
    Endif     
    Return gGeoData[FieldIndex-1]
EndFunc
[/cut]
Пример больше концептуальный, его еще нужно на практике проверять и доводить до рабочего состояния. Единственное правда, что стоит отметить, если в Autorun уже есть созданные поля через директиву Pragma AutorunPluginFields, то новые поля нужно добавлять в начало. Если добавить в конец, то FieldIndex не будет равен 1. Тогда придется это учитывать и прибавлять значение в условии

Код: Выделить всё

If FieldIndex = 1+10 Then
А в результате отбавлять

Код: Выделить всё

Return gGeoData[FieldIndex-1-10]
если полей было, например 10.

Добавлено: Сб окт 04, 2025 15:00
Monarch-LFV
Orion9
На самом деле я уже давно реализовал это через WinScriptADV, но думал, что есть стандартное решение через плагин.
[cut="Exiftool_Geolocation.vbs"]

Код: Выделить всё

' Script for WinScriptAdv content plugin
' На основе EXIF-данных о координатах показывает 
' название города, области, страны и расстояние от центра
' ВАЖНО! Для работы необходима утилита Exiftool

on error resume next

Set WshShell = CreateObject("WScript.Shell")
Set FSO  = CreateObject("Scripting.FileSystemObject")
tmp = WshShell.ExpandEnvironmentStrings("%temp%")
tcp = WshShell.ExpandEnvironmentStrings("%commander_path%")
fn = FSO.GetfileName(filename) ' Имя файла
GetTheParent = FSO.GetParentFolderName(filename)
Set fold= FSO.GetFolder(GetTheParent)
Parname=fold.name
Parsize=fold.size

If not FSO.FolderExists(tmp & "\_TC_Exiftool\") Then
  FSO.createfolder tmp & "\_TC_Exiftool\"    
End if
txtfile = tmp & "\_TC_Exiftool\~$" & Parname & "-" & Parsize & ".txt"

if not FSO.FileExists(txtfile) then
  WshShell.run "cmd /c """"" & tcp & "\Plugins\wdx\ExifTool\exiftool.exe"" -charset filename=Cyrillic -api geolocation ""-geolocation city*"" ""-geolocation region*"" ""-geolocation country*"" ""-geolocation Distance*"" """ & GetTheParent & """>""" & txtfile & """", 0, True
end if

Set objStream = CreateObject("ADODB.Stream")
objStream.CharSet = "UTF-8"
objStream.Open
  objStream.LoadFromFile txtfile
  strData = objStream.ReadText()
objStream.Close

For Each F In Split(strData, vbNewLine)
    if Instr(F, "====") and curFile<>""  then exit for
    if Instr(F, fn) then curFile = fn
    if Instr(F, "Geolocation City") and curFile<>"" then content2 = right(F, len(F)-34)
    if Instr(F, "Geolocation Region") and curFile<>"" then content1 = right(F, len(F)-34)
    if Instr(F, "Geolocation Country") and curFile<>"" then content = right(F, len(F)-34)
    if Instr(F, "Geolocation Distance") and curFile<>"" then content3 = right(F, len(F)-34)
Next
If curFile = "" then FSO.deletefile(txtfile)
[/cut]
Для ускорения загрузки я использовал метод геотегирования всей папки с фотографиями, поэтому код немного нелеп с точки зрения создания временного файла (в папке %Temp%). В скрипте нужно подправить путь до утилиты, у всех он разный.

В "options.ini" плагина WinscriptADV:

Код: Выделить всё

ActiveScripts=...|Exiftool_Geolocation|...

[Exiftool_Geolocation]
Script=Exiftool_Geolocation.vbs
content=Exiftool_Country
content1=Exiftool_Region
content2=Exiftool_City
content3=Exiftool_Distance
extensions=jpg|jpeg|jpe|heic|mov
FoldersPaths=1
Это я, кстати, обсуждаю в настоящее время на оф.форуме Гислера. Имеются предлжения от Flasher'a, но пока не рабочие. Будем надеяться, что здесь или там найдется решение.

Добавлено: Сб окт 04, 2025 23:41
Orion9
Monarch-LFV
Да, я помню, что у вас нет проблем с WinscriptADV, поэтому решил сделать на Autorun. Этот код все-равно еще пригодится, нужно только по мелочи поправить, типа gGeoList свой задать и другую консольную утилиту.
Это я, кстати, обсуждаю в настоящее время на оф.форуме Гислера. Имеются предлжения от Flasher'a
[s]Что он там все шатается? Пора уже домой.[/s]