Страница 1 из 1
Пакетный перенос (копирование) даты файлов
Добавлено: Чт дек 24, 2015 23:50
Mellomann
Дано:
1. Total Commander 8.52a
2. AkelPad
3. Архив сканов в JPG (многие тысячи)
4. Imagine.wlx
5. ПрямыеРуки.ехе
Задача:
Превратить JPG в PNG с сохранением исходной даты изменения/создания JPG файлов.
EXIFа нет, "переносить" нужно "modify timestamp" самих файлов.
Что нужно сделать:
PNG файлы уже есть, но с сегодняшним числом/датой, а куча жпегов датирована ещё с 2012 года и эти даты как-то перенести.
Есть идеи чем можно воспользоваться или как это провернуть?
Гугл молчит, как партизан, но я не верю, что подобных задач не решали раньше...
Добавлено: Пт дек 25, 2015 00:24
Staniclaw
Можно запомнить дату в комментариях к файлам через диалог ''Изменение атрибутов''. После конвертации надо будет пройтись по файлу descript.ion поиском с заменой и исправить расширения с .JPG на .PNG. Затем вновь присвоить их файлам: тот же диалог ''Изменение атрибутов'', псевдоплагин tc, в поле ''Дата модификации'' вставить вот эту конструкцию: [=tc.Комментарий] -- вручную ''Тотал'' выбрать его не даст.
Само собой, если комментарии использовались, файл с ними надо срезервировать.
Добавлено: Пт дек 25, 2015 00:49
Mellomann
Сейчас на скорую руку создал несколько текстовиков для теста.
Код: Выделить всё
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"):
На файл №3, который 22:22:22 нужно влепить 23:34 из коммента.
Результат:
http://savepic.su/6943030.png
http://savepic.su/6944054.png
ЧЯДНТ?
Добавлено спустя 7 минут:
М-да... поспешил ошибкой делиться...
Оказывается, в коммент сохраняемый штамп даты и формат его в установках - отличаются чуть более, чем полностью.
После правки descript.ion к такому виду
и
http://savepic.su/6943030.png прокатило!
Получил
Код: Выделить всё
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 и его СЦЕПИТЬ и ЛЕВСИМВ помогут...
Или есть решение без таких велосипедов на костылях?
Добавлено: Пт дек 25, 2015 00:54
Flasher
Добавлено: Пт дек 25, 2015 18:18
Flasher
А вообще не помешает пару скриптов непосредственно по теме:
Код: Выделить всё
'======================= 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
Добавлено: Вт мар 08, 2016 20:33
Моторокер
Если имена те же самые, можно все JPG переименовать в PNG и скопировать даты через плагин NSCOPY.
По уму бы конечно отдельный плагин сделать чисто для этого дела

Добавлено: Вт мар 08, 2016 23:31
Вахмурка
Добавлено: Ср апр 27, 2016 23:10
helb
И еще один вариант на PowerShell. Работает с заменой в именах с помощью регулярных выражений и опционально заменой пути. Использую, например, для восстановления дат сконвертированных файлов (пример в шапке) или у сшитых панорамных изображений.
Запускать командой вида “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
}
}
}
}
Добавлено: Пн май 02, 2016 18:28
KatMuse
Flasher писал(а):А вообще не помешает пару скриптов непосредственно по теме:
А можно скрипт для копирования с сохранением даты, времени и всех прочих атрибутов.
Добавлено: Пн май 02, 2016 19:00
Flasher
KatMuse
Сперва в
OFF заглянуть не мешало бы. Повторять оффтопный опыт, полагаю, не следовало. Ветка для копирования файлов/папок и так
имеется.
Добавлено: Вт май 03, 2016 18:10
KatMuse
Ветка для копирования файлов/папок и так имеется.
Там спросить? Я посмотрел все 7 страниц (правда так и не понял зачем создавать копии или пустышки о_0), но в явном виде решения нет или я его пропустил?
Добавлено: Вт май 03, 2016 19:31
Flasher
KatMuse писал(а):Там спросить?
А что логика подсказывает?
KatMuse писал(а):правда так и не понял зачем создавать копии
>>
KatMuse писал(а):А можно скрипт для копирования с сохранением ...
Добавлено: Пт май 06, 2016 12:27
KatMuse

Я имел ввиду копии или пустышки
для файлов. Зачем, например, нужно сто копий одного файла или какие-то пустышки.
Добавлено: Пт май 06, 2016 17:45
Flasher
KatMuse
Для файлов или для папок. На выбор. Зачем и в каком случае создавать 100 копий одного файла, я понятия не имею, так же, как и одну копию сотни файлов. Этот опциональный выбор каждый сам делает. Тут на этом всё.