Копирование фотографий с сортировкой по дате
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Копирование фотографий с сортировкой по дате Author: Hasami PostPosted: Mon Jan 18, 2010 03:01
    —
Здравствуйте!

Имеется простая задача: переместить все файлы с фотографиями с флешки в автоматически создаваемые папки на жестком диске с названием, сформированным из EXIF (в идеале) или хотя бы из даты создания файла (папки вида 2009-10-23).

Искал в гугле и на этом форуме, готового решения найти не удалось Sad Буду очень рад любым подсказкам. Заранее спасибо!

#2:  Author: Tol!kLocation: Арзамас PostPosted: Mon Jan 18, 2010 03:14
    —
http://forum.wincmd.ru/viewtopic.php?t=12592

#3:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Mon Jan 18, 2010 03:27
    —
А ещё была такая тема

#4:  Author: Samwatas PostPosted: Mon Jan 18, 2010 20:11
    —
Tol!k
Если WDX-плагины возвращают дату не в виде текста (а они скорее всего так и делают), то моя утиль тут не поможет. Если же чел найдёт плагин, который возвращает дату именно в виде текста (строковой переменной), то тогда да, его задача может решиться без особых проблем. Но я, честно говоря, в этом сомневаюсь.

#5:  Author: Tol!kLocation: Арзамас PostPosted: Mon Jan 18, 2010 20:55
    —
Samwatas
exif.wdx возвращает DateTimeStr

[offtop]
Quote:
А в общем, мне утиль понравилась, её можно доработать добавив ещё один ключ командной строки - имя колонки, и чтобы он вывел только соответствующее значение, тогда это была бы законченная утилита со всем необходимым функционалом.
Quote:
Я сейчас обдумываю концепцию новой утилиты, которая будет и читать и писать и выводить отладочную информацию и т.д.. В общем есть у меня парочка интересных идей, осталось их реализовать в коде.
Как продвигается работа?
[/offtop]

#6:  Author: Samwatas PostPosted: Tue Jan 19, 2010 00:01
    —
[offtop]
Обдумывание закончено, осталась сущая мелочь - реализовать Cool .
Я существо ленивое от природы, так что движется всё очень медленно, кроме того параллельно куча других дел (я ещё пытаюсь выучить на серъезном уровне английский - а на него желательно тратить как можно больше свободного времени, чтобы достичь заметных успехов), тем не менее, если есть интерес к утили, то попробую выделить и на неё немножко времени. А ещё лучше если я подарю свои идеи кому-нибудь из форумчан, у кого лучше знания в программировании, и есть больше свободного времени. Тогда готовую программу вы можете получить гораздо раньше. Wink
[/offtop]

#7:  Author: gre_vitLocation: Минск PostPosted: Sun Jan 24, 2010 01:23
    —
Здравствуйте. Вопрос хороший, т.к. на сайте http://www.tckb.ru задача, даже с учетом всего-лишь даты создания файла, не решена полностью (в разделе автоматизации). Решил себя попытать в этом деле первый раз. Вот, что вышло при переделке скрипта:
Code:

If WScript.Arguments.Count = 0 Then
MsgBox "Не указаны параметры!", vbOKOnly + vbError, "Внимание!"
Wscript.Quit
End If

Dim TempFile, FSO, SelFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TempFile = FSO.OpenTextFile(WScript.Arguments(0), 1)

Dim FileName, FilePath, DashInName, NewFilePath, FileDateModif

Do While Not TempFile.AtEndOfStream
   Set SelFile = FSO.GetFile(TempFile.ReadLine)
   FileName = FSO.GetBaseName(SelFile)
   FileDateModif = Left(SelFile.DateLastModified, 10)
   FilePath = SelFile.ParentFolder
   If WScript.Arguments.Count > 1 Then
      NewFilePath = WScript.Arguments(1) & FileDateModif
   Else
      NewFilePath = FilePath & "\" & FileDateModif
   End If
   If Not FSO.FolderExists(NewFilePath) Then
      FSO.CreateFolder(NewFilePath)
   End If
   If Not FSO.FileExists(NewFilePath & "\" & FileName) Then
      FSO.MoveFile SelFile, NewFilePath & "\"
   Else
      MsgBox "Уже существует файл " & FileName & " в папке " & NewFilePath, vbOKOnly + vbExclamation, "Внимание!"
   End If
Loop

Set TempFile = Nothing
Set FSO = Nothing
Set SelFile = Nothing
Wscript.Quit

Работает. Главное, как указано, необходимо в параметры создаваемой кнопки прописать параметры %L "%T".
Ах да, в данном скрипте используется дата последнего изменения файла. Сделано для того, чтобы названия папок были датами создания.

#8:  Author: gre_vitLocation: Минск PostPosted: Mon Jan 25, 2010 00:26
    —
Вот и решил поставленный автором вопрос. Может и коряво, но все же. Решение реализовано на основе моего скрипта из предыдущего поста и примера с получением поля контекстного плагина с помощью wdxtest.exe.
Ну и плюс добавил, на всякий случай обработку, если отсутствует exif-информация в файле (не изображения) - берется дата последней модификации файла.

Кто будет пользоваться: поправьте для себя пути для exif-плагина и wdxtest.exe

Code:

if WScript.Arguments.Count = 0 Then
MsgBox "Не указаны параметры!", vbOKOnly + vbError, "Внимание!"
Wscript.Quit
End If

' определяем регулярное выражение для поиска
' даты снимка из exif данных: в плагине поле Date
Dim re
Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.MultiLine = False
re.Pattern = "4: Date: .*" ' 4-е поле, возвращаемое плагином

Dim TempFile, FSO, SelFile, wdxtest, wdxplug, WshShell, DateFolder, c, res, n_month, n_day, n_year
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set TempFile = FSO.OpenTextFile(WScript.Arguments(0), 1)

wdxtest="h:\PRG\TotalCommander\Scripts\wdxtest\wdxtest.exe"'путь к wdxtest.exe
wdxplug="h:\PRG\TotalCommander\Plugins\wdx\wdx_exif\Exif.wdx"'путь к Exif плагину

' основной цикл для перебора всех выделенных файлов и переданных в скрипт
Do While Not TempFile.AtEndOfStream
   Set SelFile = FSO.GetFile(TempFile.ReadLine) 'путь к файлу, инфу о котором получаем
' запускаем wdxtext.exe с соответствующими параметрами
   Set res = WshShell.Exec(wdxtest & " " & wdxplug & " " & SelFile)
   c = res.StdOut.ReadAll
   Set field=re.Execute(c)

   FileName = FSO.GetBaseName(SelFile)

' проверка на условие корректного ответа;
' при несоответствии файла критериям плагина (отсутствует EXIF-информация)
' плагин в каждое поле возвращает ошибку, которая начинается с символов --,
' тогда за имя создаваемого каталога берется дата последней модификации файла
' (обычно соотвествует дате создания)
   If InStr(field(0).Value,"--")>0 Then
      DateFolder = Left(SelFile.DateLastModified, 10)
   Else
      DateFolder = Replace(Mid(field(0).Value,10,10),"/",".")
' приведение даты к виду dd.mm.yyyy
      n_year = Left(DateFolder,4)
      n_month = Mid(DateFolder,6,2)
      n_day = Right (DateFolder,2)
      DateFolder = n_day & "." & n_month & "." & n_year
   End If
   FilePath = SelFile.ParentFolder
   If WScript.Arguments.Count > 1 Then
      NewFilePath = WScript.Arguments(1) & DateFolder
   Else
      NewFilePath = FilePath & "\" & DateFolder
   End If
   If Not FSO.FolderExists(NewFilePath) Then
      FSO.CreateFolder(NewFilePath)
   End If
   If Not FSO.FileExists(NewFilePath & "\" & FileName) Then
      FSO.MoveFile SelFile, NewFilePath & "\"
   Else
      MsgBox "Уже существует файл " & FileName & " в папке " & NewFilePath, vbOKOnly + vbExclamation, "Внимание!"
   End If
Loop


В данном случае я использую 4-е поле Date контекстного плагина exif.wdx. Вообще можно переделать под любое поле с датой.
Достаточно в строке
Code:
re.Pattern = "4: Date: .*"

Поменять 4: Date: на название соответствующего поля. Сами поля, возвращаемые плагином (для примера) :

0: Width: 1024
1: Height: 768
2: Colordepth: -- ft_fieldempty: Field valid, but empty
3: DateTimeStr: '2008:11:30 22:12:17'
4: Date: 2008/11/30
5: Time: 22:12:17
6: DateOriginal: 2008/11/30
7: TimeOriginal: 22:12:17
8: DateDigitized: 2008/11/30
9: TimeDigitized: 22:12:17
10: ComponentsConfiguration: 'YCbCr'
11: CompressedBitsPerPixel: 5
12: ExifVersion: '0220'
13: ExposureBiasValue: 0
14: ExposureProgram: -- ft_fieldempty: Field valid, but empty
15: ExposureTimeFraction: '1/40'
16: ExposureTimeNr: 0.025
17: Flash: forced off
18: FNumber: 2.8
19: FocalLength: 5.8
20: ISO: 800
21: LightSource: -- ft_fieldempty: Field valid, but empty
22: Make: 'Canon'
23: ApertureValue: '2.8'
24: MaxApertureValue: '2.8'
25: MeteringMode: multi-segment
26: Model: 'Canon PowerShot A720 IS'
27: Orientation: Top left

#9:  Author: Tol!kLocation: Арзамас PostPosted: Fri Sep 24, 2010 03:21
    —
Многообещающая тулза
Quote:
Renaming and/or Moving Files ^

By writing a new value to the FileName and/or Directory tags, files can be renamed and/or moved to different directories. This can be a very powerful tool in combination with the -d (date format) option for organizing images by date/time. For example, the following command renames all images in directory "DIR" according to the individual file's creation date in the form "yyyymmdd_HHMMSS.ext".
exiftool "-FileName<CreateDate" -d "%Y%m%d_%H%M%S.%%e" DIR

Or a new directory can be specified by setting the value of the Directory tag. For example, the following command moves all images originally in directory "DIR" into a directory hierarchy organized by year/month/day:
exiftool "-Directory<DateTimeOriginal" -d "%Y/%m/%d" DIR

Read here for more details about this powerful feature.

#10:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Sep 24, 2010 11:51
    —
xxcopy тоже может учитывать дату.

#11:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Fri Sep 24, 2010 16:16
    —
Вахмурка
А там же вроде только текущая дата операции, а не дата создания файлов?

#12:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Sep 24, 2010 16:33
    —
А я так и сказал - "учитывать". Вот еще об обработке даты/времени: создания, изменения, доступа.
Давеча была дискуссия тут (лень искать), где я дал аналогичную ссылку...

#13:  Author: Serge Yolkin PostPosted: Fri Sep 24, 2010 19:03
    —
Hasami
http://forum.wincmd.ru/viewpost.php?p=67803?

#14:  Author: Tol!kLocation: Арзамас PostPosted: Fri Sep 24, 2010 23:14
    —
Вахмурка wrote:
xxcopy тоже может учитывать дату.
Насколько я понял, тулза использует дату из EXIF снимка, а не из свойств файла.

Добавлено
Проверил, действительно из EXIF снимка:
Modify Date
Date/Time Original
Create Date

File Modification Date/Time – из свойств файла.

#15:  Author: Tol!kLocation: Арзамас PostPosted: Sun Sep 26, 2010 10:01
    —
Hasami wrote:
переместить все файлы с фотографиями с флешки в автоматически создаваемые папки на жестком диске с названием, сформированным из EXIF ... (папки вида 2009-10-23).

Code:
TOTALCMD#BAR#DATA
%ComSpec% /c exiftool.exe
"-Directory<DateTimeOriginal" -d "%T%%Y-%%m-%%d" .
%commander_path%\wcmicons.dll,58
Рассортировать все снимки по исходной дате

1
-1



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group