Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Копирование фотографий с сортировкой по дате
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Hasami



Joined: 18 Jan 2010
Posts: 1

Post (Separately) Posted: Mon Jan 18, 2010 03:01    Post subject: Копирование фотографий с сортировкой по дате Reply with quote

Здравствуйте!

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

Искал в гугле и на этом форуме, готового решения найти не удалось Sad Буду очень рад любым подсказкам. Заранее спасибо!
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Jan 18, 2010 03:14    Post subject: Reply with quote

http://forum.wincmd.ru/viewtopic.php?t=12592
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Mon Jan 18, 2010 03:27    Post subject: Reply with quote

А ещё была такая тема
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Mon Jan 18, 2010 20:11    Post subject: Reply with quote

Tol!k
Если WDX-плагины возвращают дату не в виде текста (а они скорее всего так и делают), то моя утиль тут не поможет. Если же чел найдёт плагин, который возвращает дату именно в виде текста (строковой переменной), то тогда да, его задача может решиться без особых проблем. Но я, честно говоря, в этом сомневаюсь.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Jan 18, 2010 20:55    Post subject: Reply with quote

Samwatas
exif.wdx возвращает DateTimeStr

[offtop]
Quote:
А в общем, мне утиль понравилась, её можно доработать добавив ещё один ключ командной строки - имя колонки, и чтобы он вывел только соответствующее значение, тогда это была бы законченная утилита со всем необходимым функционалом.
Quote:
Я сейчас обдумываю концепцию новой утилиты, которая будет и читать и писать и выводить отладочную информацию и т.д.. В общем есть у меня парочка интересных идей, осталось их реализовать в коде.
Как продвигается работа?
[/offtop]
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Tue Jan 19, 2010 00:01    Post subject: Reply with quote

[offtop]
Обдумывание закончено, осталась сущая мелочь - реализовать Cool .
Я существо ленивое от природы, так что движется всё очень медленно, кроме того параллельно куча других дел (я ещё пытаюсь выучить на серъезном уровне английский - а на него желательно тратить как можно больше свободного времени, чтобы достичь заметных успехов), тем не менее, если есть интерес к утили, то попробую выделить и на неё немножко времени. А ещё лучше если я подарю свои идеи кому-нибудь из форумчан, у кого лучше знания в программировании, и есть больше свободного времени. Тогда готовую программу вы можете получить гораздо раньше. Wink
[/offtop]
Back to top
View user's profile Send private message
gre_vit



Joined: 24 Jan 2010
Posts: 2
Location: Минск

Post (Separately) Posted: Sun Jan 24, 2010 01:23    Post subject: Reply with quote

Здравствуйте. Вопрос хороший, т.к. на сайте 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".
Ах да, в данном скрипте используется дата последнего изменения файла. Сделано для того, чтобы названия папок были датами создания.
Back to top
View user's profile Send private message
gre_vit



Joined: 24 Jan 2010
Posts: 2
Location: Минск

Post (Separately) Posted: Mon Jan 25, 2010 00:26    Post subject: Reply with quote

Вот и решил поставленный автором вопрос. Может и коряво, но все же. Решение реализовано на основе моего скрипта из предыдущего поста и примера с получением поля контекстного плагина с помощью 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
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Sep 24, 2010 03:21    Post subject: Reply with quote

Многообещающая тулза
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.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Fri Sep 24, 2010 11:51    Post subject: Reply with quote

xxcopy тоже может учитывать дату.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Fri Sep 24, 2010 16:16    Post subject: Reply with quote

Вахмурка
А там же вроде только текущая дата операции, а не дата создания файлов?
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Fri Sep 24, 2010 16:33    Post subject: Reply with quote

А я так и сказал - "учитывать". Вот еще об обработке даты/времени: создания, изменения, доступа.
Давеча была дискуссия тут (лень искать), где я дал аналогичную ссылку...
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Fri Sep 24, 2010 19:03    Post subject: Reply with quote

Hasami
http://forum.wincmd.ru/viewpost.php?p=67803?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Fri Sep 24, 2010 23:14    Post subject: Reply with quote

Вахмурка wrote:
xxcopy тоже может учитывать дату.
Насколько я понял, тулза использует дату из EXIF снимка, а не из свойств файла.

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

File Modification Date/Time – из свойств файла.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Sep 26, 2010 10:01    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group