Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Пакетный перенос (копирование) даты файлов

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Mellomann



Joined: 07 Sep 2009
Posts: 708

Post (Separately) Posted: Fri Dec 25, 2015 00:50    Post subject: Пакетный перенос (копирование) даты файлов Reply with quote

Дано:
1. Total Commander 8.52a
2. AkelPad
3. Архив сканов в JPG (многие тысячи)
4. Imagine.wlx
5. ПрямыеРуки.ехе

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

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

Есть идеи чем можно воспользоваться или как это провернуть?
Гугл молчит, как партизан, но я не верю, что подобных задач не решали раньше...
Back to top
View user's profile Send private message
Staniclaw



Joined: 12 Dec 2010
Posts: 533
Location: Ташкент

Post (Separately) Posted: Fri Dec 25, 2015 01:24    Post subject: Reply with quote

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

Само собой, если комментарии использовались, файл с ними надо срезервировать.
_________________
Вечному двигателю -- вечные тормоза!..
Back to top
View user's profile Send private message
Mellomann



Joined: 07 Sep 2009
Posts: 708

Post (Separately) Posted: Fri Dec 25, 2015 01:42    Post subject: Reply with quote

Сейчас на скорую руку создал несколько текстовиков для теста.
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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Dec 25, 2015 01:54    Post subject: Reply with quote

Клик.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Dec 25, 2015 19:18    Post subject: Reply with quote

А вообще не помешает пару скриптов непосредственно по теме:
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
View user's profile Send private message
Моторокер



Joined: 06 May 2005
Posts: 1517
Location: г. Пермь (читается Перьмь)

Post (Separately) Posted: Tue Mar 08, 2016 21:33    Post subject: Reply with quote

Если имена те же самые, можно все JPG переименовать в PNG и скопировать даты через плагин NSCOPY.

По уму бы конечно отдельный плагин сделать чисто для этого дела Smile
_________________
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Wed Mar 09, 2016 00:31    Post subject: Reply with quote

Еще один способ
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
helb



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: Thu Apr 28, 2016 00:10    Post subject: Reply with quote

И еще один вариант на 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
View user's profile Send private message
KatMuse



Joined: 26 Jul 2014
Posts: 82

Post (Separately) Posted: Mon May 02, 2016 19:28    Post subject: Reply with quote

Flasher wrote:
А вообще не помешает пару скриптов непосредственно по теме:

А можно скрипт для копирования с сохранением даты, времени и всех прочих атрибутов.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon May 02, 2016 20:00    Post subject: Reply with quote

KatMuse
Сперва в OFF заглянуть не мешало бы. Повторять оффтопный опыт, полагаю, не следовало. Ветка для копирования файлов/папок и так имеется.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
KatMuse



Joined: 26 Jul 2014
Posts: 82

Post (Separately) Posted: Tue May 03, 2016 19:10    Post subject: Reply with quote

Quote:
Ветка для копирования файлов/папок и так имеется.

Там спросить? Я посмотрел все 7 страниц (правда так и не понял зачем создавать копии или пустышки о_0), но в явном виде решения нет или я его пропустил?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue May 03, 2016 20:31    Post subject: Reply with quote

KatMuse wrote:
Там спросить?
А что логика подсказывает? Wink
KatMuse wrote:
правда так и не понял зачем создавать копии
>>
KatMuse wrote:
А можно скрипт для копирования с сохранением ...

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
KatMuse



Joined: 26 Jul 2014
Posts: 82

Post (Separately) Posted: Fri May 06, 2016 13:27    Post subject: Reply with quote

Smile
Я имел ввиду копии или пустышки для файлов. Зачем, например, нужно сто копий одного файла или какие-то пустышки.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri May 06, 2016 18:45    Post subject: Reply with quote

KatMuse
Для файлов или для папок. На выбор. Зачем и в каком случае создавать 100 копий одного файла, я понятия не имею, так же, как и одну копию сотни файлов. Этот опциональный выбор каждый сам делает. Тут на этом всё.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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