View previous topic :: View next topic |
Author |
Message |
Hasami
Joined: 18 Jan 2010 Posts: 1
|
(Separately) Posted: Mon Jan 18, 2010 03:01 Post subject: Копирование фотографий с сортировкой по дате |
|
|
Здравствуйте!
Имеется простая задача: переместить все файлы с фотографиями с флешки в автоматически создаваемые папки на жестком диске с названием, сформированным из EXIF (в идеале) или хотя бы из даты создания файла (папки вида 2009-10-23).
Искал в гугле и на этом форуме, готового решения найти не удалось Буду очень рад любым подсказкам. Заранее спасибо! |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
|
Back to top |
|
|
Rodny
Joined: 24 Jan 2007 Posts: 949 Location: Могилёв, Беларусь
|
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Mon Jan 18, 2010 20:11 Post subject: |
|
|
Tol!k
Если WDX-плагины возвращают дату не в виде текста (а они скорее всего так и делают), то моя утиль тут не поможет. Если же чел найдёт плагин, который возвращает дату именно в виде текста (строковой переменной), то тогда да, его задача может решиться без особых проблем. Но я, честно говоря, в этом сомневаюсь. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon Jan 18, 2010 20:55 Post subject: |
|
|
Samwatas
exif.wdx возвращает DateTimeStr
[offtop]
Quote: | А в общем, мне утиль понравилась, её можно доработать добавив ещё один ключ командной строки - имя колонки, и чтобы он вывел только соответствующее значение, тогда это была бы законченная утилита со всем необходимым функционалом. |
Quote: | Я сейчас обдумываю концепцию новой утилиты, которая будет и читать и писать и выводить отладочную информацию и т.д.. В общем есть у меня парочка интересных идей, осталось их реализовать в коде. | Как продвигается работа?
[/offtop] |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Tue Jan 19, 2010 00:01 Post subject: |
|
|
[offtop]
Обдумывание закончено, осталась сущая мелочь - реализовать .
Я существо ленивое от природы, так что движется всё очень медленно, кроме того параллельно куча других дел (я ещё пытаюсь выучить на серъезном уровне английский - а на него желательно тратить как можно больше свободного времени, чтобы достичь заметных успехов), тем не менее, если есть интерес к утили, то попробую выделить и на неё немножко времени. А ещё лучше если я подарю свои идеи кому-нибудь из форумчан, у кого лучше знания в программировании, и есть больше свободного времени. Тогда готовую программу вы можете получить гораздо раньше.
[/offtop] |
|
Back to top |
|
|
gre_vit
Joined: 24 Jan 2010 Posts: 2 Location: Минск
|
(Separately) Posted: Sun Jan 24, 2010 01:23 Post subject: |
|
|
Здравствуйте. Вопрос хороший, т.к. на сайте 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 |
|
|
gre_vit
Joined: 24 Jan 2010 Posts: 2 Location: Минск
|
(Separately) Posted: Mon Jan 25, 2010 00:26 Post subject: |
|
|
Вот и решил поставленный автором вопрос. Может и коряво, но все же. Решение реализовано на основе моего скрипта из предыдущего поста и примера с получением поля контекстного плагина с помощью 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 |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Fri Sep 24, 2010 03:21 Post subject: |
|
|
Многообещающая тулза
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 |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
Rodny
Joined: 24 Jan 2007 Posts: 949 Location: Могилёв, Беларусь
|
(Separately) Posted: Fri Sep 24, 2010 16:16 Post subject: |
|
|
Вахмурка
А там же вроде только текущая дата операции, а не дата создания файлов? |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Fri Sep 24, 2010 23:14 Post subject: |
|
|
Насколько я понял, тулза использует дату из EXIF снимка, а не из свойств файла.
Добавлено
Проверил, действительно из EXIF снимка:
Modify Date
Date/Time Original
Create Date
File Modification Date/Time – из свойств файла. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun Sep 26, 2010 10:01 Post subject: |
|
|
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 |
|
|
|
|
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
|