Сравнение файлов в панелях по именам
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Сравнение файлов в панелях по именам Author: LonerDLocation: Донецк PostPosted: Sun Jun 16, 2013 15:43
    —
Можно ли каким-то нехитрым способом сравнить и выделить файлы (и каталоги) в панелях только по именам, не учитывая их размер, даты...
( cm_CompareDirs выделяет в панелях файлы с различающимися датами - это не то, что требуется )
Приходит только идея скрипта, который выполняет копирование списка имён в панелях и построчное сравнение этих списков...
Но может есть какой-то более простой способ?

#2:  Author: FlasherLocation: Москва PostPosted: Sun Jun 16, 2013 16:03
    —
Для разноразмерных было (отдельно для папок). Для любых папок было (у меня сейчас слегка исправленный вариант). Чисто по именам ещё такой вариант:
Code:
'=====================================================================
' Выделение в панелях одноимённых файлов и/или папок

' Параметры: "%P" "%T" <файлы/каталоги/всё: 1/2/3>
'======================= Путь к утилите TCFS2 ========================
TCFS2 = "%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe"
'=====================================================================
With WScript.Arguments
  If .Count < 3 Then MsgBox "Укажите все требуемые параметры!", 48,_
  Space(13) & "Выделение элементов в панели" : WScript.Quit
  P = .Item(0) : T = .Item(1) : C = .Item(2)
End With
With CreateObject("Scripting.FileSystemObject")
  Set P = .GetFolder(P) : Set T = .GetFolder(T)
End With
Set D = CreateObject("Scripting.Dictionary")
Set G = CreateObject("Scripting.Dictionary")

Select Case C
  Case 1 ForFolders List
  Case 2 ForFiles List
  Case 3 ForFolders List : ForFiles List
End Select : D.RemoveAll : G.RemoveAll : Set D = Nothing : Set G = Nothing

With CreateObject("InternetExplorer.Application")
  .Navigate("about:blank")
  T = .Document.ParentWindow.ClipboardData.GetData("text")
  .Document.ParentWindow.ClipboardData.SetData "text", Mid(List,1)
  CreateObject("WScript.Shell").Exec TCFS2 & " /ef msg($0B,0) ""tcm(2033) tcm(4002) tcm(2033)" & _
  " tcm(4001), test(L_isActive) | tcm(2033) tcm(4001) tcm(2033) tcm(4002)"" msg($0B,1) redraw()"
  .Document.ParentWindow.ClipboardData.SetData "text", Mid(T,1)
  .ExecWB 45, 2 : .Quit
End With : Wscript.Quit

Sub ForFolders(S)
  Set SFolders = P.SubFolders
  If SFolders.Count Then
    For Each F in SFolders     : D.Add F.Name, "" : Next
    For Each F in T.SubFolders : G.Add F.Name, "" : Next
    For Each F in D.Keys
      If G.Exists(F) Then S = S & vbnewline & F & "\"
    Next
  End If
End Sub

Sub ForFiles(S)
  For Each F in P.Files : D.Add F.Name, "" : Next
  For Each F in T.Files : G.Add F.Name, "" : Next
  For Each F in D.Keys
    If G.Exists(F) Then S = S & vbnewline & F
  Next
End Sub


P.S.: поиск! - поиск! - поиск! Twisted Evil

#3:  Author: LonerDLocation: Донецк PostPosted: Mon Jun 17, 2013 19:53
    —
Спасибо!!!
Работает. Неспешно и не всегда стабильно (иногда после вызова скрипта ничего не происходит, нужно второй раз вызывать), но в целом - то что надо.
Для любых папок я уже давно использую почти ту конструкцию, что у тебя в посте.
А вот для файлов - не хватало.

Имхо, это такая функция, которая должна бы быть по умолчанию в файловом менеджере. Сейчас у Гислера подобное сравнение можно сделать в инструменте синхронизации, но нет экспорта результатов сравнения на панель (по аналогии с экспортом результатов поиска).

#4:  Author: FlasherLocation: Москва PostPosted: Sun Jun 23, 2013 17:24
    —
LonerD
Пожалуйста. Тормоза и нестабильность возникает из-за занесения в буфер предыдущего значения. Криво отрабатывает компонент IE. Себе-то я делаю (портабельно) с другим компонентом, а тут предлагаю только с тем, что должен быть предустановлен в системе. Через консольную утилиту я могу заносить в буфер только через поток, но тогда нельзя будет скрыть окно консоли.
Могу убрать перезапись, но тогда в буфере будет список совпавшего.

#5:  Author: mwzLocation: Россия, Москва PostPosted: Fri Jun 28, 2013 11:33
    —
LonerD
Quote:
( cm_CompareDirs выделяет в панелях файлы с различающимися датами - это не то, что требуется )


cm_FileSync (в частности с галкой "Игнорировать дату" -- и при необходимости другими) и нажатие "Сравнить" (синхронизировать после этого не обязательно) -- не то, что надо?

#6:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Jun 28, 2013 12:43
    —
mwz
Выше уже абсолютно ясно (и абсолютно правильно) сказано:
LonerD wrote:
Сейчас у Гислера подобное сравнение можно сделать в инструменте синхронизации, но нет экспорта результатов сравнения на панель (по аналогии с экспортом результатов поиска).

Так что — как минимум, не совсем то.

#7:  Author: sa PostPosted: Fri Jun 28, 2013 14:14
    —
LonerD wrote:
Приходит только идея скрипта

Может, стоит попросить Гислера ввести в wincmd.ini один или два ключа, чтобы при сравнении файлов можно было игнорировать дату и размер файлов? По аналогии с существующим ключом 1hourdif=1…

#8:  Author: FlasherLocation: Москва PostPosted: Fri Jun 28, 2013 14:59
    —
Готовая команда всяко лучше ключей.

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Jun 28, 2013 15:25
    —
По-любому. Ключи - это путаница. А команда будет полезна, если надо использовать оба режима.

#10:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Jun 28, 2013 15:37
    —
sa
Если на то пошло, надо не ключи просить, а полноценные настроечные опции. Существуют файл-менеджеры, где это давным-давно реализовано либо в общем диалоге настроек, либо в специальном операционном диалоге сравнения, появляющемся после вызова соответствующей команды. Вообще говоря, второй вариант предпочтительнее.

#11:  Author: sa PostPosted: Fri Jun 28, 2013 15:57
    —
Flasher wrote:
Готовая команда всяко лучше ключей.
Сейчас уже имеются, как минимум 3 команды сравнения (Сравнить каталоги, Сравнить каталоги с учётом подкаталогов, Сравнить каталоги, скрыв одинаковые файлы). Потому и предложил ключ, который бы менял их поведение. А так захочется завести целых три дополнительных команды по аналогии с существующими…

Avada wrote:
надо не ключи просить, а полноценные настроечные опции.
Но храниться-то эти опции всё равно будут, скорее всего, в ключах.
А реализация интерфейса, разумеется, может быть разной.

#12:  Author: FlasherLocation: Москва PostPosted: Fri Jun 28, 2013 16:36
    —
MVV wrote:
если надо использовать оба режима.
Только режима 3.

Avada wrote:
Вообще говоря, второй вариант предпочтительнее.
Из контекста неясно, какой второй. Команды или опции в диалоге?

sa wrote:
Потому и предложил ключ, который бы менял их поведение.
Т.е. предлагается пользователю самому сторонними средствами менять значение этого ключа при выполнении нужной команды выделения? И какое тут тогда преимущество, если мы и так сейчас прибегаем к сторонним решениям?

#13:  Author: sa PostPosted: Fri Jun 28, 2013 16:50
    —
Flasher
Нет, как раз без сторонних средств в итоге хотелось бы обойтись(блокнот к ним не отношу).
Скорее, мне ближе вариант Avada с опциями в диалоге, где команда объединяет все три имеющиеся (опции с учётом подкаталогов и скрыть одинаковые) и дополнительными опциями учёта даты и размера.

#14:  Author: FlasherLocation: Москва PostPosted: Fri Jun 28, 2013 17:17
    —
sa
Т.е. при том или ином режиме мы должны каждый раз лазить в диалог настроек для того, чтобы выделять так, как нам нужно?

#15:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Jun 28, 2013 17:21
    —
Flasher wrote:
Из контекста неясно, какой второй. Команды или опции в диалоге?

Из контекста, ИМХО, как раз всё ясно.
Avada wrote:
либо в общем диалоге настроек, либо в специальном операционном диалоге сравнения, появляющемся после вызова соответствующей команды

Диалоговые опции в аналогичных программах предусмотрены по-любому. Но в одном случае они достаточно стабильные, долговременные, в общем диалоге настроек, а в другом — в операционном диалоге, более гибко регулируемые. Пример первой реализации — FreeCommander, примеры второй — Altap Salamander и SpeedCommander. Условный аналог соответствующих вариантов в TC (только для другой операции) — настройки архивации на странице "Архиваторы" и в диалоге упаковки.


Last edited by Avada on Fri Jun 28, 2013 17:32; edited 1 time in total



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


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

Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Page 1 of 9

Powered by phpBB © 2001, 2005 phpBB Group