Пакетный перенос (копирование) даты файлов
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Пакетный перенос (копирование) даты файлов Author: Mellomann PostPosted: Fri Dec 25, 2015 00:50
    —
Дано:
1. Total Commander 8.52a
2. AkelPad
3. Архив сканов в JPG (многие тысячи)
4. Imagine.wlx
5. ПрямыеРуки.ехе

Задача:
Превратить JPG в PNG с сохранением исходной даты изменения/создания JPG файлов.
EXIFа нет, "переносить" нужно "modify timestamp" самих файлов.

Что нужно сделать:
PNG файлы уже есть, но с сегодняшним числом/датой, а куча жпегов датирована ещё с 2012 года и эти даты как-то перенести.

Есть идеи чем можно воспользоваться или как это провернуть?
Гугл молчит, как партизан, но я не верю, что подобных задач не решали раньше...

#2:  Author: StaniclawLocation: Ташкент PostPosted: Fri Dec 25, 2015 01:24
    —
Можно запомнить дату в комментариях к файлам через диалог ''Изменение атрибутов''. После конвертации надо будет пройтись по файлу descript.ion поиском с заменой и исправить расширения с .JPG на .PNG. Затем вновь присвоить их файлам: тот же диалог ''Изменение атрибутов'', псевдоплагин tc, в поле ''Дата модификации'' вставить вот эту конструкцию: [=tc.Комментарий] -- вручную ''Тотал'' выбрать его не даст.

Само собой, если комментарии использовались, файл с ними надо срезервировать.

#3:  Author: Mellomann PostPosted: Fri Dec 25, 2015 01:42
    —
Сейчас на скорую руку создал несколько текстовиков для теста.
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 и его СЦЕПИТЬ и ЛЕВСИМВ помогут...

Или есть решение без таких велосипедов на костылях?

#4:  Author: FlasherLocation: Москва PostPosted: Fri Dec 25, 2015 01:54
    —
Клик.

#5:  Author: FlasherLocation: Москва PostPosted: Fri Dec 25, 2015 19:18
    —
А вообще не помешает пару скриптов непосредственно по теме:
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

#6:  Author: МоторокерLocation: г. Пермь (читается Перьмь) PostPosted: Tue Mar 08, 2016 21:33
    —
Если имена те же самые, можно все JPG переименовать в PNG и скопировать даты через плагин NSCOPY.

По уму бы конечно отдельный плагин сделать чисто для этого дела Smile

#7:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Wed Mar 09, 2016 00:31
    —
Еще один способ

#8:  Author: helb PostPosted: Thu Apr 28, 2016 00:10
    —
И еще один вариант на 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
         }
        }
   }
}

#9:  Author: KatMuse PostPosted: Mon May 02, 2016 19:28
    —
Flasher wrote:
А вообще не помешает пару скриптов непосредственно по теме:

А можно скрипт для копирования с сохранением даты, времени и всех прочих атрибутов.

#10:  Author: FlasherLocation: Москва PostPosted: Mon May 02, 2016 20:00
    —
KatMuse
Сперва в OFF заглянуть не мешало бы. Повторять оффтопный опыт, полагаю, не следовало. Ветка для копирования файлов/папок и так имеется.

#11:  Author: KatMuse PostPosted: Tue May 03, 2016 19:10
    —
Quote:
Ветка для копирования файлов/папок и так имеется.

Там спросить? Я посмотрел все 7 страниц (правда так и не понял зачем создавать копии или пустышки о_0), но в явном виде решения нет или я его пропустил?

#12:  Author: FlasherLocation: Москва PostPosted: Tue May 03, 2016 20:31
    —
KatMuse wrote:
Там спросить?
А что логика подсказывает? Wink
KatMuse wrote:
правда так и не понял зачем создавать копии
>>
KatMuse wrote:
А можно скрипт для копирования с сохранением ...

#13:  Author: KatMuse PostPosted: Fri May 06, 2016 13:27
    —
Smile
Я имел ввиду копии или пустышки для файлов. Зачем, например, нужно сто копий одного файла или какие-то пустышки.

#14:  Author: FlasherLocation: Москва PostPosted: Fri May 06, 2016 18:45
    —
KatMuse
Для файлов или для папок. На выбор. Зачем и в каком случае создавать 100 копий одного файла, я понятия не имею, так же, как и одну копию сотни файлов. Этот опциональный выбор каждый сам делает. Тут на этом всё.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group