View previous topic :: View next topic |
Author |
Message |
Mellomann
Joined: 07 Sep 2009 Posts: 708
|
(Separately) Posted: Fri Dec 25, 2015 00:50 Post subject: Пакетный перенос (копирование) даты файлов |
|
|
Дано:
1. Total Commander 8.52a
2. AkelPad
3. Архив сканов в JPG (многие тысячи)
4. Imagine.wlx
5. ПрямыеРуки.ехе
Задача:
Превратить JPG в PNG с сохранением исходной даты изменения/создания JPG файлов.
EXIFа нет, "переносить" нужно "modify timestamp" самих файлов.
Что нужно сделать:
PNG файлы уже есть, но с сегодняшним числом/датой, а куча жпегов датирована ещё с 2012 года и эти даты как-то перенести.
Есть идеи чем можно воспользоваться или как это провернуть?
Гугл молчит, как партизан, но я не верю, что подобных задач не решали раньше... |
|
Back to top |
|
|
Staniclaw
Joined: 12 Dec 2010 Posts: 533 Location: Ташкент
|
(Separately) Posted: Fri Dec 25, 2015 01:24 Post subject: |
|
|
Можно запомнить дату в комментариях к файлам через диалог ''Изменение атрибутов''. После конвертации надо будет пройтись по файлу descript.ion поиском с заменой и исправить расширения с .JPG на .PNG. Затем вновь присвоить их файлам: тот же диалог ''Изменение атрибутов'', псевдоплагин tc, в поле ''Дата модификации'' вставить вот эту конструкцию: [=tc.Комментарий] -- вручную ''Тотал'' выбрать его не даст.
Само собой, если комментарии использовались, файл с ними надо срезервировать. _________________ Вечному двигателю -- вечные тормоза!.. |
|
Back to top |
|
|
Mellomann
Joined: 07 Sep 2009 Posts: 708
|
(Separately) Posted: Fri Dec 25, 2015 01:42 Post subject: |
|
|
Сейчас на скорую руку создал несколько текстовиков для теста. Code: | test1.txt 1 24.12.15 22:22 -a--
test2.txt 1 24.12.15 23:34 -a--
test3.txt 1 24.12.15 22:22 -a-- | и descript.ion (заменено "2" на "3"): Code: | test3.txt 20151224 233410 | На файл №3, который 22:22:22 нужно влепить 23:34 из коммента.
Результат:
http://savepic.su/6943030.png
http://savepic.su/6944054.png
ЧЯДНТ?
Добавлено спустя 7 минут:
М-да... поспешил ошибкой делиться...
Оказывается, в коммент сохраняемый штамп даты и формат его в установках - отличаются чуть более, чем полностью.
После правки descript.ion к такому виду Code: | test3.txt 24.12.2015 23:34:10 | и http://savepic.su/6943030.png прокатило!
Получил Code: | test1.txt 1 24.12.15 22:22 -a--
test2.txt 1 24.12.15 23:34 -a--
test3.txt 1 24.12.15 23:34 -a-- | что и требовалось!
Опробую, значит, на своих архивах, посмотрим, что из этого выйдет.
Жаль, придётся строки ещё чем-то обрабатывать... Но то ладно, чудо Excel и его СЦЕПИТЬ и ЛЕВСИМВ помогут...
Или есть решение без таких велосипедов на костылях? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Dec 25, 2015 01:54 Post subject: |
|
|
Клик. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Dec 25, 2015 19:18 Post subject: |
|
|
А вообще не помешает пару скриптов непосредственно по теме:
Code: | '======================= VBS =======================
' Замещение дат модификации выбранных файлов на даты
' модификации файлов с аналогичными базовыми именами
' Параметры: %WL <расширение одноимённых файлов>
'===================================================
With WScript.Arguments
C = .Count : If C = 0 Then WScript.Quit
List = .Item(0) : Ext = .Item(1)
End With
Set ShA = CreateObject("Shell.Application")
With CreateObject("Scripting.FileSystemObject")
Set File = .OpenTextFile(List,,,-1)
Do : F = File.ReadLine
Folder = .GetParentFolderName(F)
Name = .GetBaseName(F) & "." & Ext
If .FileExists(F) And .FileExists(Folder & "\" &_
Name) And LCase(Ext) <> LCase(.GetExtensionName(F)) Then
Set Folder = ShA.NameSpace(Folder)
Folder.ParseName(.GetFileName(F)).ModifyDate =_
Folder.ParseName(Name).ModifyDate
End If
Loop Until File.AtEndOfStream
End With |
Code: | '=========================== VBS ===========================
' Замена дат создания и модификации выбранных файлов на даты
' создания и модификации файлов с аналогичным базовым именем
' Условие: требуется Script Helper ActiveX for TC by Volniy
' Параметры: %WL <расширение одноимённых файлов>
'===========================================================
With WScript.Arguments
C = .Count : If C = 0 Then WScript.Quit
List = .Item(0) : Ext = .Item(1)
End With
Set TCH = CreateObject("TCScript.Helper")
With CreateObject("Scripting.FileSystemObject")
Set File = .OpenTextFile(List,,,-1)
Do : F1 = File.ReadLine
If .FileExists(F1) Then
F2 = .GetParentFolderName(F1) & _
"\" & .GetBaseName(F1) & "." & Ext
If .FileExists(F2) And LCase(Ext) <> LCase(.GetExtensionName(F1)) Then
With .GetFile(F2)
TCH.SetFileDateAtr F1, .DateCreated, .DateLastModified
End With
End If
End If
Loop Until File.AtEndOfStream
End With |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Tue Mar 08, 2016 21:33 Post subject: |
|
|
Если имена те же самые, можно все JPG переименовать в PNG и скопировать даты через плагин NSCOPY.
По уму бы конечно отдельный плагин сделать чисто для этого дела _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
helb
Joined: 08 Oct 2014 Posts: 57
|
(Separately) Posted: Thu Apr 28, 2016 00:10 Post subject: |
|
|
И еще один вариант на PowerShell. Работает с заменой в именах с помощью регулярных выражений и опционально заменой пути. Использую, например, для восстановления дат сконвертированных файлов (пример в шапке) или у сшитых панорамных изображений.
Запускать командой вида “powershell <имя.ps1> <параметры>”. PS должен быть установлен (актуально только для Win XP), и должно быть разрешено выполнение скриптов (единовременная команда “Set-ExecutionPolicy RemoteSigned” в среде PS)
Code: | <# Fix timestamps by mask [by helb] v2015-12-07
Takes filenames of files you need to fix from specified list, gets respective source filenames by replacing mask match (and optionally path) and restores timestamps from them.
e.g. somefile1.png > somefile-stitched.png
Command line usage: powershell <this script pathname> <listfile> -mask '<regexp of what to replace>' [-subst '<substitute text>'] [-mask2 '<>'] [-subst2 '<>'] [-pfrom """<path part to replace>""" -pto """<path substitute>"""]
Example: powershell fix-timestamps-mask.ps1 %temp%\list.tmp -mask '\.m4a$|\.aac$' -srcmask '.mp3' -pfrom """B\:Sync\Converted\""" -pto """D:\"""
Any ‘$’ characters in path should be escaped with ‘`’ (grave accent/back tick): “`$”
Total Commander list parameter: %UL
Берет имена файлов, которым требуется исправить даты, из указанного списка, получает имена соответствующих им исходных файлов заменой по маске (и опционально пути) и восстанавливает дату из них.
Использование: powershell <путь скрипта> <файл-список> -mask '<regexp того что требуется заменить>' [-subst '<на что заменить>'] [-mask2 '<>'] [-subst2 '<>'] [-pfrom """<часть пути для замены>""" -pto """<на что заменить (путь)>"""]
Любые символы «$» в пути требуется заменить на «`$»
Параметр листа в TC: %UL
#>
Param
(
[parameter(Position=0)][String[]]$list,
[String[]]$mask,
[String[]]$mask2,
[String[]]$subst,
[String[]]$subst2,
[String[]]$pfrom,
[String[]]$pto
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
function setTimestamp($path, $time) {
$file = get-item -LiteralPath $path -force
$ro = $file.IsReadOnly
$file.IsReadOnly = $false
$file.LastWriteTime = $time
if ($ro) { $file.IsReadOnly = $true }
}
function msgBx($text, $title, $btns = 0) {
return [System.Windows.Forms.MessageBox]::Show($text, $title, $btns)
}
#msgBx ($mask +" • "+ $srcmask +"`n"+ $pfrom +"`n"+ $pto +"`n"+ $list) "titl"
if (!$list) { msgBx "No list specified." "Error"; return }
if (!$mask) { msgBx "No mask specified." "Error"; return }
$list = [environment]::ExpandEnvironmentVariables($list)
if (!(test-path -literalPath $list)) { msgBx "List file not found." "Warning"; return }
else {
(get-content $list | where-object { (test-path -literalPath $_) }) | foreach {
if ($_ -match $mask) {
if ($matches.count -gt 1) {
$srcname = [string]([io.fileinfo]$_).name -replace $matches[1], $subst
} else {
$srcname = [string]([io.fileinfo]$_).name -replace $matches[0], $subst
}
if ($mask2 -and $srcname -match $mask2) {
if ($matches.count -gt 1) {
$srcname = $srcname -replace $matches[1], $subst2
} else {
$srcname = $srcname -replace $matches[0], $subst2
}
}
$pathname = [string]([io.fileinfo]$_).directory + "\"
if ($pfrom -and $pto) {
$pathname = $pathname.replace($pfrom, $pto)
}
$srcname = $pathname + $srcname
if (test-path -literalPath $srcname) {
setTimestamp $_ (get-item -literalPath $srcname -force).LastWriteTime
}
}
}
}
|
|
|
Back to top |
|
|
KatMuse
Joined: 26 Jul 2014 Posts: 82
|
(Separately) Posted: Mon May 02, 2016 19:28 Post subject: |
|
|
Flasher wrote: | А вообще не помешает пару скриптов непосредственно по теме:
|
А можно скрипт для копирования с сохранением даты, времени и всех прочих атрибутов. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon May 02, 2016 20:00 Post subject: |
|
|
KatMuse
Сперва в OFF заглянуть не мешало бы. Повторять оффтопный опыт, полагаю, не следовало. Ветка для копирования файлов/папок и так имеется. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
KatMuse
Joined: 26 Jul 2014 Posts: 82
|
(Separately) Posted: Tue May 03, 2016 19:10 Post subject: |
|
|
Quote: | Ветка для копирования файлов/папок и так имеется. |
Там спросить? Я посмотрел все 7 страниц (правда так и не понял зачем создавать копии или пустышки о_0), но в явном виде решения нет или я его пропустил? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue May 03, 2016 20:31 Post subject: |
|
|
KatMuse wrote: | Там спросить? | А что логика подсказывает?
KatMuse wrote: | правда так и не понял зачем создавать копии | >>
KatMuse wrote: | А можно скрипт для копирования с сохранением ... |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
KatMuse
Joined: 26 Jul 2014 Posts: 82
|
(Separately) Posted: Fri May 06, 2016 13:27 Post subject: |
|
|
Я имел ввиду копии или пустышки для файлов. Зачем, например, нужно сто копий одного файла или какие-то пустышки. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri May 06, 2016 18:45 Post subject: |
|
|
KatMuse
Для файлов или для папок. На выбор. Зачем и в каком случае создавать 100 копий одного файла, я понятия не имею, так же, как и одну копию сотни файлов. Этот опциональный выбор каждый сам делает. Тут на этом всё. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|