Пакетный перенос (копирование) даты файлов
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Пакетный перенос (копирование) даты файлов
Дано:
1. Total Commander 8.52a
2. AkelPad
3. Архив сканов в JPG (многие тысячи)
4. Imagine.wlx
5. ПрямыеРуки.ехе
Задача:
Превратить JPG в PNG с сохранением исходной даты изменения/создания JPG файлов.
EXIFа нет, "переносить" нужно "modify timestamp" самих файлов.
Что нужно сделать:
PNG файлы уже есть, но с сегодняшним числом/датой, а куча жпегов датирована ещё с 2012 года и эти даты как-то перенести.
Есть идеи чем можно воспользоваться или как это провернуть?
Гугл молчит, как партизан, но я не верю, что подобных задач не решали раньше...
1. Total Commander 8.52a
2. AkelPad
3. Архив сканов в JPG (многие тысячи)
4. Imagine.wlx
5. ПрямыеРуки.ехе
Задача:
Превратить JPG в PNG с сохранением исходной даты изменения/создания JPG файлов.
EXIFа нет, "переносить" нужно "modify timestamp" самих файлов.
Что нужно сделать:
PNG файлы уже есть, но с сегодняшним числом/датой, а куча жпегов датирована ещё с 2012 года и эти даты как-то перенести.
Есть идеи чем можно воспользоваться или как это провернуть?
Гугл молчит, как партизан, но я не верю, что подобных задач не решали раньше...
Можно запомнить дату в комментариях к файлам через диалог ''Изменение атрибутов''. После конвертации надо будет пройтись по файлу descript.ion поиском с заменой и исправить расширения с .JPG на .PNG. Затем вновь присвоить их файлам: тот же диалог ''Изменение атрибутов'', псевдоплагин tc, в поле ''Дата модификации'' вставить вот эту конструкцию: [=tc.Комментарий] -- вручную ''Тотал'' выбрать его не даст.
Само собой, если комментарии использовались, файл с ними надо срезервировать.
Само собой, если комментарии использовались, файл с ними надо срезервировать.
Вечному двигателю -- вечные тормоза!..
Сейчас на скорую руку создал несколько текстовиков для теста.и descript.ion (заменено "2" на "3"):На файл №3, который 22:22:22 нужно влепить 23:34 из коммента.
Результат:
http://savepic.su/6943030.png
http://savepic.su/6944054.png
ЧЯДНТ?
Добавлено спустя 7 минут:
М-да... поспешил ошибкой делиться...
Оказывается, в коммент сохраняемый штамп даты и формат его в установках - отличаются чуть более, чем полностью.
После правки descript.ion к такому виду и http://savepic.su/6943030.png прокатило!
Получил что и требовалось!
Опробую, значит, на своих архивах, посмотрим, что из этого выйдет.
Жаль, придётся строки ещё чем-то обрабатывать... Но то ладно, чудо Excel и его СЦЕПИТЬ и ЛЕВСИМВ помогут...
Или есть решение без таких велосипедов на костылях?
Код: Выделить всё
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--Код: Выделить всё
test3.txt 20151224 233410Результат:
http://savepic.su/6943030.png
http://savepic.su/6944054.png
ЧЯДНТ?
Добавлено спустя 7 минут:
М-да... поспешил ошибкой делиться...
Оказывается, в коммент сохраняемый штамп даты и формат его в установках - отличаются чуть более, чем полностью.
После правки descript.ion к такому виду
Код: Выделить всё
test3.txt 24.12.2015 23:34:10Получил
Код: Выделить всё
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 и его СЦЕПИТЬ и ЛЕВСИМВ помогут...
Или есть решение без таких велосипедов на костылях?
Клик.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
А вообще не помешает пару скриптов непосредственно по теме:
Код: Выделить всё
'======================= 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Код: Выделить всё
'=========================== 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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
- Моторокер
- Сообщения: 1517
- Зарегистрирован: Пт май 06, 2005 08:22
- Откуда: г. Пермь (читается Перьмь)
- Контактная информация:
Если имена те же самые, можно все JPG переименовать в PNG и скопировать даты через плагин NSCOPY.
По уму бы конечно отдельный плагин сделать чисто для этого дела
По уму бы конечно отдельный плагин сделать чисто для этого дела
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
ПармаСруб - строительство домов и бань в Перми
- Вахмурка
- Сообщения: 2587
- Зарегистрирован: Пн дек 27, 2004 14:47
- Откуда: Большая деревня Москва
- Контактная информация:
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
И еще один вариант на PowerShell. Работает с заменой в именах с помощью регулярных выражений и опционально заменой пути. Использую, например, для восстановления дат сконвертированных файлов (пример в шапке) или у сшитых панорамных изображений.
Запускать командой вида “powershell <имя.ps1> <параметры>”. PS должен быть установлен (актуально только для Win XP), и должно быть разрешено выполнение скриптов (единовременная команда “Set-ExecutionPolicy RemoteSigned” в среде PS)
Запускать командой вида “powershell <имя.ps1> <параметры>”. PS должен быть установлен (актуально только для Win XP), и должно быть разрешено выполнение скриптов (единовременная команда “Set-ExecutionPolicy RemoteSigned” в среде PS)
Код: Выделить всё
<# 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
}
}
}
}
KatMuse
Сперва в OFF заглянуть не мешало бы. Повторять оффтопный опыт, полагаю, не следовало. Ветка для копирования файлов/папок и так имеется.
Сперва в OFF заглянуть не мешало бы. Повторять оффтопный опыт, полагаю, не следовало. Ветка для копирования файлов/папок и так имеется.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
А что логика подсказывает?KatMuse писал(а):Там спросить?
>>KatMuse писал(а):правда так и не понял зачем создавать копии
KatMuse писал(а):А можно скрипт для копирования с сохранением ...
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
KatMuse
Для файлов или для папок. На выбор. Зачем и в каком случае создавать 100 копий одного файла, я понятия не имею, так же, как и одну копию сотни файлов. Этот опциональный выбор каждый сам делает. Тут на этом всё.
Для файлов или для папок. На выбор. Зачем и в каком случае создавать 100 копий одного файла, я понятия не имею, так же, как и одну копию сотни файлов. Этот опциональный выбор каждый сам делает. Тут на этом всё.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.