Дата/время изменения файлов из получателя в источник
Select messages from
# through # FAQ
[/[Print]\]

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

#1: Дата/время изменения файлов из получателя в источник Author: Dimsok PostPosted: Thu Aug 01, 2019 05:54
    —
Нужно менять дату модификации файлов в текущей панели на дату модификации файлов из другой панели. Желательно в 2 вариантах:
1. Изменяется время выделенных в текущей панели файлов на время выбранных в противоположной панели файлов. При условии, что количество выбранных файлов в другой и текущей панели идентично, при том, что имена могут быть разными. В противном случае ничего не делать.
2. Изменяется время всех файлов в текущей панели на время модификации файлов из другой панели. Только тех, чьи имена (вместе с расширениями) совпадают с именами файлов в противоположной панели.

#2:  Author: FlasherLocation: Москва PostPosted: Thu Aug 01, 2019 10:31
    —
1. А если где-то будут выбраны только или частично папки? Смотреть на совпадение кол-ва лучше обработки меньшего из чисел?
2. Папки игнорировать?

#3:  Author: Dimsok PostPosted: Fri Aug 02, 2019 01:17
    —
1. Если выбраны папки, то ничего не делать. То же самое во втором вопросе - только совпадение количества.
2. Имеешь в виду выделенные папки вместо файлов или рекурсию? Если можно (или не сложно) отдельный параметр, то рекурсия не помешала бы. В противном случае лучше без неё.

#4:  Author: sa PostPosted: Fri Aug 02, 2019 11:00
    —
Dimsok
Вторую задачу можно решить из диалога синхронизации каталогов: Сравнить, Ctrl+A, Контекстное меню, Копировать свойства файла…

#5:  Author: sa PostPosted: Fri Aug 02, 2019 16:17
    —
Dimsok
Стоит учесть момент, что при использовании синхронизации каталогов в варианте с рекурсией (галка "с подкаталогами"), скопируются метки даты и времени также и папок, содержащих файлы (подробнее здесь).

#6:  Author: FlasherLocation: Москва PostPosted: Fri Aug 02, 2019 20:45
    —
Про неавтоматизацию в этом разделе мы не говорим...

Dimsok
Проверяй:
Code:
'========================== VBS ===========================
' Замена дат модификации выбранных в активной панели файлов
' на даты модификации файлов, выбранных в пассивной панели

' Условия: • необходим компонент TCScript.dll 1.0.0.15+
'          • числа файлов в панелях должны совпадать
'          • должны быть выбраны только файлы
'          • TC 9.10+
'===================================== Автор: Flasher © ===
Option Explicit: Dim TCH, FSO, A, AList, PList, i, F, MDate
Set TCH = CreateObject("TCScript.Helper")
Set FSO = CreateObject("Scripting.FileSystemObject")
With TCH
  A = .GetInfo(1000)
  Select Case True
    Case .GetInfo(1006+A) + .GetInfo(1004+A) = 0 Quit "В активной панели  ничего не выбрано!"
    Case .GetInfo(1009-A) + .GetInfo(1007-A) = 0 Quit "В пассивной панели ничего не выбрано!"
    Case .GetInfo("LP") =  .GetInfo("RP") Quit  "Источник не должен совпадать с получателем!"
    Case .GetInfo(1005) <> .GetInfo(1006) Quit "Количества выделенных объектов не совпадают!"
  End Select
  .LockTC True : AList = .GetSrcSelectedFiles(1)
  If Right(AList(0), 1) = "\" Then Quit "Снимите выделение с папок активной панели!"
  PList = .GetTrgSelectedFiles(1)
  If Right(PList(0), 1) = "\" Then Quit "Снимите выделение с папок пассивной панели!"
  .LockTC False : A = .GetInfo(1005) : If A = 0 Then A = 1
  For i = 0 To A - 1
    MDate = FSO.GetFile(PList(i)).DateLastModified : Set F = FSO.GetFile(AList(i))
    If MDate <> F.DateLastModified Then .SetFileDateAtr AList(i), F.DateCreated, MDate
  Next
End With
Set TCH = Nothing: Set FSO = Nothing
CreateObject("WScript.Shell").Popup Space(13) & "Выполнено!",_
 1.7, " Замена дат модификации файлов      ", 4160

Sub Quit(Msg)
  Dim Color : Set FSO = Nothing
  With TCH
    .LockTC False
    Color = .INIRead(.MainINI, "Colors", "BackColor", "16777215")
    If Color = "-1" Then Color = 16777215
    CreateObject("Internet.HHCtrl").TextPopup Msg,_
    .INIRead(.MainINI, "AllResolutions", "FontNameTip", "Verdana") &","&_
    .INIRead(.MainINI, "AllResolutions", "FontSizeTip", "10"), 20, 10,_
    Abs(.INIRead(.MainINI,"Colors","ForeColor","-1")), Color
    WSH.Sleep 2000 : Set TCH = Nothing : WSH.Quit
  End With
End Sub
Code:
'=================== VBS ====================
' Изменить даты модификации файлов активной
' панели на даты одноимённых файлов пассивной

' Условие:  путь запуска — пустой

' Параметр: "%T"
' /r — ключ обработки всей файловой структуры
'============================================
Option Explicit: Dim FSO, PPath, PLn, APath, R, AFold, c
Set FSO = CreateObject("Scripting.FileSystemObject")
PPath = WSH.Arguments(0) : PLn  = Len(PPath) + 1
APath = FSO.GetAbsolutePathName("")
R = WSH.Arguments.Named.Exists("r")
With CreateObject("Shell.Application")
  Set AFold = .NameSpace(APath) : Recurse .NameSpace(PPath)
End With
Set AFold = Nothing : Set FSO = Nothing
If c Or R Then CreateObject("WScript.Shell").Popup Space(13) &_
"Выполнено!", 1.7, " Замена дат модификации файлов      ", 4160

Sub Recurse(PFold)
  RPath = Mid(PFold.Self.Path, PLn)
  Dim RPath, Items, i, Name, FName
  Set Items = PFold.Items
  Items.Filter 73920, "*"
  For Each i in Items
    Name = FSO.GetFileName(i.Path)
    If FSO.FileExists(FSO.BuildPath(APath, RPath & "\" & Name)) Then c = 1:_
    AFold.ParseName(FSO.BuildPath(RPath, Name)).ModifyDate = i.ModifyDate
  Next
  If R Then Items.Filter 73888, "*" :_
  For Each i in Items: Recurse i.GetFolder :Next
  Set Items = Nothing
End Sub
Кое-что похожее выкладывал.

Last edited by Flasher on Sat Aug 03, 2019 06:51; edited 2 times in total

#7:  Author: Dimsok PostPosted: Sat Aug 03, 2019 03:35
    —
1. Какие параметры? Пишет, в активной панели ничего не выбрано.
Кстати, какой-то глюк с TCScript: если нажать в любое место TC пока видно всплывающее окно с этим сообщением, TC сворачивается. Так и должно быть?

Добавлено спустя 5 минут:

2. Возможно ли сделать так, чтобы окно "Выполнено" появлялось только при выполненной задаче, а не во всех случаях?

#8:  Author: FlasherLocation: Москва PostPosted: Sat Aug 03, 2019 04:07
    —
1. Зачем спрашиваешь? Их нет. Забыл указать ещё одно условие: TC9+. У тебя какая версия?
А ТС именно сворачивается? Или окно замерзает/пропадает? Глюка быть не должно, т.к. разблокировка стоит перед появлением. На 7 ничего такого не наблюдалось.

2. Что ты называешь всеми случаями?

#9:  Author: Dimsok PostPosted: Sat Aug 03, 2019 04:15
    —
Последняя 8. С пустыми параметрами выдавал ошибку.
Ну появляется окно другой программы.

Ну когда изменение даты не происходит при не совпадении имён. То есть, когда выполнять нечего.

#10:  Author: FlasherLocation: Москва PostPosted: Sat Aug 03, 2019 04:36
    —
На 8 нет смысла. По ныняшним меркам — каменный век.
Окно какой программы? Идущее следом после верхнего?

Ну, даже если совпадений нет, скрипт свою работу сделал, о чём и сигнализирует. И ты точно можешь понять, что процесс не висит, а работа скрипта окончена. Особенно актуально для рекурсии.

#11:  Author: Dimsok PostPosted: Sat Aug 03, 2019 04:53
    —
Окно браузера Opera.
А 9 - космический? Или ещё бронзовый? Смотрел, что там есть. Ничего такого, чтоб прям ах, прорыв.

#12:  Author: FlasherLocation: Москва PostPosted: Sat Aug 03, 2019 05:11
    —
Т.е. браузер открывается, когда закрыт?

Насчёт второго скрипта. Могу сделать, чтобы окно не появлялось в случае полного несовпадения, но без указания /r.

 Век ТС

#13:  Author: Dimsok PostPosted: Sat Aug 03, 2019 05:17
    —
Нет, открыт. Ещё бы он самостоятельно программы запускал. Это уж точно был бы прорыв. Если бы, конечно, читал мысли и знал, что запускать.

Ладно, обойдусь пока без 1-го скрипта. Потом как-нибудь когда можно будет сразу шагнуть в золотой.
Спасибо.

Со вторым сделай без всплывающего окна. Рекурсией всё равно если буду пользоваться, то редко.

#14:  Author: FlasherLocation: Москва PostPosted: Sat Aug 03, 2019 05:34
    —
Dimsok wrote:
Ещё бы он самостоятельно программы запускал. Это уж точно был бы прорыв.
И что же тут прорывного? В куче скриптов программы как запускали, так и будут запускать. Я спросил "Идущее следом после верхнего?", а в ответ вместо "да" получаю константу: "Окно браузера Opera.". Может, глюк Internet.HHCtrl, мне откуда знать.

Dimsok wrote:
Ладно, обойдусь пока без 1-го скрипта.
А моё зря потраченное время кто оплатит? Я мог бы упростить и под 8-ку, но теперь уже откровенно лень...

Dimsok wrote:
Со вторым сделай без всплывающего окна.
Вообще? А как ты узнаешь, что скрипт сработал? Будешь сортировать по дате или полезешь смотреть в свойства файлов?

#15:  Author: Dimsok PostPosted: Sat Aug 03, 2019 06:06
    —
Quote:
И что же тут прорывного? В куче скриптов программы как запускали, так и будут запускать

Телепатические?

Quote:
Вообще?

Ну так, как ты предположил - в случае несовпадения. Да и зачем куда-то лезть, когда колонка со временем вроде бы имеется.

#16:  Author: FlasherLocation: Москва PostPosted: Sat Aug 03, 2019 06:21
    —
Quote:
Телепатические?
Что? Программы? Опера среди них? Very Happy

Quote:
Ну так, как ты предположил - в случае несовпадения.
Сделал.
Quote:
Да и зачем куда-то лезть, когда колонка со временем вроде бы имеется.
"Вроде бы" я на это и указал. Смена сортировки — лишнее действие.

#17:  Author: Dimsok PostPosted: Sat Aug 03, 2019 06:45
    —
Quote:
Сделал.

Строка 10, символ 57. Недопустимый знак.
Вроде бы уже мудрое утро настало.

#18:  Author: FlasherLocation: Москва PostPosted: Sat Aug 03, 2019 06:53
    —
Да если б дело в часах было... Вручную правил. Раскладка не сменилась. Заменил символ. Также версию ТС указал в первом коде.

Так уж и быть, чисто ради разминки — упрощённые (без тултипов) и адаптированные под TC 8.52a версии к первому ТЗ:
Code:
'========================== VBS ===========================
' Замена дат модификации выбранных в активной панели файлов
' на даты модификации файлов, выбранных в пассивной панели

' Условия: • необходим компонент TCScript.dll 1.0.0.14+
'          • источник не должен совпадать с получателем
'          • числа файлов в панелях должны совпадать
'          • должны быть выбраны только файлы

' Параметры: %S1 %R1
'==========================================================
Option Explicit
Dim TCH, FSO, SP, TP, AList, PList, c, i, F, MDate
If WSH.Arguments.Count < 2 Then Quit
Set TCH = CreateObject("TCScript.Helper")
Set FSO = CreateObject("Scripting.FileSystemObject")
SP = TCH.GetInfo("SP") : TP = TCH.GetInfo("TP")
If Not FSO.FileExists(SP & WSH.Arguments(0)) Then Quit
If Not FSO.FileExists(TP & WSH.Arguments(1)) Then Quit
If SP = TP Then Quit
AList = TCH.GetSrcSelectedFiles(1)
TCH.LockTC True : PList = TCH.GetTrgSelectedFiles(1) : TCH.LockTC False
c = UBound(AList) : If c <> UBound(PList) Then Quit
For i = 0 To c
  MDate = FSO.GetFile(PList(i)).DateLastModified : Set F = FSO.GetFile(AList(i))
  If MDate <> F.DateLastModified Then TCH.SetFileDateAtr AList(i), F.DateCreated, MDate
Next
Sub Quit: Set FSO = Nothing : Set TCH = Nothing : WSH.Quit :End Sub
CreateObject("WScript.Shell").Popup Space(13) & "Выполнено!",_
 1.4, " Замена дат модификации файлов      ", 4160 : Quit
Code:
'========================== VBS ===========================
' Замена дат модификации выбранных в активной панели файлов
' на даты модификации файлов, выбранных в пассивной панели

' Условия: • источник не должен совпадать с получателем
'          • числа файлов в панелях должны совпадать
'          • должны быть выбраны только файлы
'          • путь запуска — пустой

' Параметры: %WF "%T" %R
'==========================================================
Option Explicit : Dim A, C, FSO, AP, List, i, n, MDate
Set A = WSH.Arguments : C = A.Count : If C < 3 Then WSH.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO
  AP = .GetAbsolutePathName("")
  If StrComp(AP & "\", A(1), 1) = 0 Then WSH.Quit
  If  Not  .FileExists(A(1) & A(2)) Then WSH.Quit
  List = Split(.OpenTextFile(A(0),,,-1).ReadAll, vbCrLf)
End With
If Right(List(0), 1) = "\" Then WSH.Quit
If Ubound(List)  <>  C - 2 Then WSH.Quit
Set AP = CreateObject("Shell.Application").NameSpace(AP)
For i = 0 To C - 3
  MDate = FSO.GetFile(A(1) & A(i + 2)).DateLastModified
  If MDate <> FSO.GetFile(AP.Self.Path & "\" & List(i)) _
  Then AP.ParseName(List(i)).ModifyDate = MDate : n = 1
Next
If n Then CreateObject("WScript.Shell").Popup Space(13) &_
"Выполнено!", 1.4, " Замена дат модификации файлов      ", 4160
Последний (без Хелпера) имеет лимит списка пассивной панели в рамках длины комстроки.

#19:  Author: Dimsok PostPosted: Sun Aug 04, 2019 01:28
    —
1. В "C:\Замена" отсутствует расширение имени файла.
2. Так же.

#20:  Author: FlasherLocation: Москва PostPosted: Sun Aug 04, 2019 08:01
    —
И это ты называешь багрепортом?

#21:  Author: Dimsok PostPosted: Mon Aug 05, 2019 03:14
    —
https://i.imgur.com/nzSxXk2.jpg

#22:  Author: FlasherLocation: Москва PostPosted: Mon Aug 05, 2019 14:02
    —
Это не баг. В первом случае ты не взял путь скрипта в кавычки, а во втором не убрал путь к wscript.exe.

И почему молчишь про предыдущее исправление? Без обратной связи желание помогать пропадает...

#23:  Author: Dimsok PostPosted: Tue Aug 06, 2019 02:42
    —
Quote:
В первом случае ты не взял путь скрипта в кавычки, а во втором не убрал путь к wscript.exe.

Ничего такого нет. Я просто перетаскиваю скрипт на панель и добавляю параметры.

Про какое предыдущее исправление?

#24:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 03:01
    —
Странно. Покажи полностью строку команды.

То, что ты просил по второму коду топика.

#25:  Author: Dimsok PostPosted: Tue Aug 06, 2019 03:03
    —
"C:\Замена дат модификации выбранных в активной панели файлов (tc8).vbs"

Добавлено спустя 35 секунд:

Переименовать?

Добавлено спустя 5 минут:

Изменить даты модификации файлов активной панели на даты одноимённых файлов пассивной.vbs?

Спасибо, нормально работает.

Добавлено спустя 15 минут:

Хм, оба варианта работают, если в пути нет пробелов. Независимо от наличия кавычек. С чего бы это...

#26:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 03:54
    —
И ТС у тебя 8.52a? Так?

Dimsok wrote:
Спасибо, нормально работает
Пож-та, хорошо.

#27:  Author: Dimsok PostPosted: Tue Aug 06, 2019 04:02
    —
Так.

#28:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 04:05
    —
Хм. А строку для первого варианта ты не показал.

Dimsok wrote:
нормально работает.
А с /r проверял?

Last edited by Flasher on Tue Aug 06, 2019 04:13; edited 1 time in total

#29:  Author: Dimsok PostPosted: Tue Aug 06, 2019 04:12
    —
"C:\Замена дат модификации выбранных в активной панели файлов2 (tc8).vbs"

#30:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 04:15
    —
Так а где путь к wscript.exe спереди? Я же тебе архив дал.

#31:  Author: Dimsok PostPosted: Tue Aug 06, 2019 04:21
    —
Странно, в версии для tc9 этого не требовалось.
И как же он догадывается о нахождении wscript, когда в пути к скрипту нет пробелов.

#32:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 04:29
    —
А при чём тут версия? Это могло сработать только, если ты dll без нужды зарегистрировал. Только зачем, спрашивается? Тогда бы не было смысла в остальных файлах...
Не понял, при чём тут отсутствие пробелов в пути к скрипту?

#33:  Author: Dimsok PostPosted: Tue Aug 06, 2019 04:33
    —
Ладно, как бы то ни было, задача решена. Спасибо.

#34:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 04:43
    —
Погоди. Ну, скрипт же будет внутрях сборки ТС. А там могут быть пробелы (в т.ч. при переносе). С этим надо что-то решать.
И зачем регистрировал-то?

#35:  Author: Dimsok PostPosted: Tue Aug 06, 2019 04:52
    —
TCScript.dll?
Без этого последние 2 варианта не работают.

#36:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 04:58
    —
Глупости не пиши. В последнем варианте в условиях его нет, на что дополнительно указано строкой после кода.
А по предыдущему пиши нормальный багрепорт.

Варианты с dll в условии ты делал по примеру этой кнопки?
Внутренности архива распаковал в одно место?

#37:  Author: Dimsok PostPosted: Wed Aug 07, 2019 02:00
    —
По примеру, когда ты сказал про необходимость указания пути к wscript.exe.
В одно.

#38:  Author: FlasherLocation: Москва PostPosted: Wed Aug 07, 2019 04:26
    —
А библиотеку разрегистрировал перед тестами?

Last edited by Flasher on Wed Aug 07, 2019 15:07; edited 1 time in total

#39:  Author: Dimsok PostPosted: Wed Aug 07, 2019 04:32
    —
Да, только чего-то после unregister всё равно работает, как будто она зарегистрирована.

#40:  Author: FlasherLocation: Москва PostPosted: Wed Aug 07, 2019 11:12
    —
Конечно, в этом и суть портабельности. Wink Ты название и начало статьи по ссылке прочти для начала. Заодно в этот топик загляни.
И, возможно, у тебя старые версии по другим путям зарегистрированы. С них тоже надо снять реги. Введи TCWSHelp.exe|TCScript.dll в Everything. Dll разрегистрируй через контекстное меню, а TCWSHelp.exe с полным путём и с ключом /UNREGSERVER вызови.



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