[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Andrey_A, ХарВик, chip642  
OpenPathCloneSpyInTC.au3 - Открыть 2 пути CloneSpy в TC
Andrey_AДата: Четверг, 06.02.2014, 10:34 | Сообщение № 1
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Открыть 2 пути из окна дубликатов CloneSpy в левой и правой файловой панели Total Commander

Код
; OpenPathCloneSpyInTC.au3
; ========================   Описание   ===========================================
; Открыть 2 пути из окна дубликатов CloneSpy в левой и правой файловой панели Total Commander   
;
; Автор:           Аверин Андрей
; Версия:          1.1 (06.02.2014 - 08.02.2014)
; Mail:            Averin-And@yandex.ru
; Site:            http://tc-image.3dn.ru/forum/3-924-8635-16-1391668463
; ==============================================================================
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

; получаем дескриптор окна дубликатов CloneSpy   
$h_CloneSpy=WinGetHandle("[TITLE:CloneSpy;CLASS:#32770]","")
If Not $h_CloneSpy Then Exit

; получаем дескриптор ListView
$h_ListView=ControlGetHandle($h_CloneSpy, "", "[CLASS:SysListView32; INSTANCE:3]")

; получаем 1-ю строку
$sString1=_GUICtrlListView_GetItemTextString($h_ListView,0)
If Not $sString1 Then Exit

; получаем 2-ю строку
$sString2=_GUICtrlListView_GetItemTextString($h_ListView,1)
If Not $sString2 Then Exit

; получаем 1-й путь
$aPath1=StringSplit($sString1,'|',1)
If Not IsArray($aPath1) Then Exit
$sPath1=$aPath1[1]
If Not FileExists($sPath1) Then Exit   

; получаем 2-й путь
$aPath2=StringSplit($sString2,'|',1)
If Not IsArray($aPath2) Then Exit
$sPath2=$aPath2[1]
If Not FileExists($sPath2) Then Exit   

$PathTC=_Env("%COMMANDER_EXE%")
If Not FileExists($PathTC) Then Exit   

Run('"'&$PathTC&'"'&' /O /L="'&$sPath1&"\'"&'" /R="'&$sPath2&"\'"&'"')

; меняет относительный путь на абсолютный
Func _Env($fName)
    $aR=StringRegExp($fName,"%(\w+)%",3)
    If IsArray($aR) Then
      For $k=0 To UBound($aR)-1
        $fName=StringReplace($fName,"%"&$aR[$k]&"%",EnvGet($aR[$k]))
      Next
    EndIf
    Return $fName
EndFunc



 
sfdgsdfgsdfgsdfДата: Суббота, 08.02.2014, 07:31 | Сообщение № 2
Лейтенант

На сайте с: 21.09.2012
Город: Челябинск
Сообщений: 43
Награды: 0
Репутация: 4
Вот проверил скрипт на последней версии CloneSpy 3.1. У меня выдало такую ошибку:



CloneSpy может выдавать результаты анализа по одному (т.е. после каждой найденной группы дубликатов выдается такое окно):



Либо все найденные дубликаты выводятся списком:

[img640]http://radikall.com/images/2014/02/08/LYwSy.jpg[/img640]

Я правильно понял, что Ваш скрипт предназначен для первого варианта вывода? И что работать это должно так: появилось окно с парой дубликатов - нажал на кнопку скрипта в Total Commander?

Я пробовал оба варианта - в обоих случаях одна и та же ошибка. Версия AutoIt у меня 3.3.8.1

Почитал ваши рекомендации по работе со скриптами и понял, что скрипт заупскать должен не Total Commander, а программа типа AutoIt.

Тогда мой вопрос звучит по другому.

Предположим, CloneSpy нашел 5 дубликатов одного файла. Если мы имеем список полных путей к этим файлам в буфере обмена, можно ли сделать скрипт, который бы открывал первые два файла в панелях, а остальные - а табах любой из панелей?

Если это возможно, то получится простое и удобное решение.

У каждой группы дубликатов автор обещает повесить кнопочку для запуска нужного нам скрипта. Указываем в качестве параметра этот скрипт. И дальше все просто: выбираем нужную группу дубликатов. Жмем кнопку: список путей файлов копируется в буфер и запускается скрипт.

Подскажите, можно ли такую логику реализовать и я бы тогда сообщил автору CloneSpy, что он может внести такую функцию в свою программу и для этого надо то-то и то-то.

Поможете ли Вы с такой реализацией.
 
Andrey_AДата: Суббота, 08.02.2014, 13:40 | Сообщение № 3
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Цитата sfdgsdfgsdfgsdf ()
CloneSpy может выдавать результаты анализа по одному

Именно в этом режиме и тестировался скрипт, у меня всё работает. Немного подправил - версия 1.1 - у меня версия Autoit 3.3.9.21

Цитата sfdgsdfgsdfgsdf ()
скрипт запускать должен не Total Commander, а программа типа AutoIt.

Да , можно отдельно, можно и с панели Total Commander, например так:
Код

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe "%COMMANDER_PATH%\0\_Autoit\-test\OpenPathCloneSpyInTC.au3"

Wcmicons.dll,2119
Открыть 2 пути из окна дубликатов CloneSpy в левой и правой файловой панели Total Commander

-1


Цитата sfdgsdfgsdfgsdf ()
Предположим, CloneSpy нашел 5 дубликатов одного файла. Если мы имеем список полных путей к этим файлам в буфере обмена, можно ли сделать скрипт, который бы открывал первые два файла в панелях, а остальные - а табах любой из панелей?


Не тестировал, но думаю можно. Вы сами можете посмотреть параметры командной строки Total Commander, где поддерживание открытие пути в новой вкладке.

Цитата sfdgsdfgsdfgsdf ()
У каждой группы дубликатов автор обещает повесить кнопочку для запуска нужного нам скрипта. Указываем в качестве параметра этот скрипт. И дальше все просто: выбираем нужную группу дубликатов. Жмем кнопку: список путей файлов копируется в буфер и запускается скрипт.


Если автор программы собирается нечто подобное сделать, то
вариант с буфером обмена - не самый лучший вариант - лучше сделать некий параметр передающий список путей:
- в виде строки (т.е. пути передаются через разделитель или пробел)

Цитата sfdgsdfgsdfgsdf ()
Подскажите, можно ли такую логику реализовать и я бы тогда сообщил автору CloneSpy, что он может внести такую функцию в свою программу и для этого надо то-то и то-то.


Можно - нужно, чтобы CloneSpy передавал строку путей


 
Andrey_AДата: Суббота, 08.02.2014, 13:42 | Сообщение № 4
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Вот примерный файл приёма путей и ... дальнейшее действие (это начальный кусок)

Код
; скрипт принимающий параметры путей
$CmdLine[0] ; массив параметров, передающихся скрипту

$aPath1=$CmdLine[1]
$aPath2=$CmdLine[2]

If Not FileExists($sPath1) Then Exit      

If Not FileExists($sPath2) Then Exit      

$PathTC=_Env("%COMMANDER_EXE%")
If Not FileExists($PathTC) Then Exit      

Run('"'&$PathTC&'"'&' /O /L="'&$sPath1&"\'"&'" /R="'&$sPath2&"\'"&'"')

; меняет относительный путь на абсолютный
Func _Env($fName)
       $aR=StringRegExp($fName,"%(\w+)%",3)
       If IsArray($aR) Then
         For $k=0 To UBound($aR)-1
           $fName=StringReplace($fName,"%"&$aR[$k]&"%",EnvGet($aR[$k]))
         Next
       EndIf
       Return $fName
EndFunc


А вот вызов, с передачей параметров (путей) скрипту

Код
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe "%COMMANDER_PATH%\0\_Autoit\-test\OpenPathCloneSpyInTC2.au3"
"C:\Test\Name1.txt" "C:\Test\Name2.txt" "C:\Test\Name3.txt" "C:\Test\Name4.txt"
Wcmicons.dll,2119
Открыть 2 пути из окна дубликатов CloneSpy в левой и правой файловой панели Total Commander

-1


Кстати, в таком варианте это может быть простой скрипт на vbs (autoit нужен был для работы с окном)

Вот пример - скрипту передаются пути, а он их открывает в тотале:

Код
With WScript Cnt = .Arguments.Count
   If Cnt < 1 Then WScript.Quit
   aPath1 = .Arguments(0)
   aPath2 = .Arguments(1)
End With

PathTC = GetPath("%COMMANDER_EXE%")

CreateObject("WScript.Shell").Run("""" & PathTC & """ /O /L=""" & aPath1 & "\'""  /R=""" & aPath2 & """\'" )

Function GetPath(pPath) : GetPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings(pPath) : End Function


Пример вызова:

Код
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Name.vbs
"C:\Test\Name.txt" "C:\Test\Test.txt"
%COMMANDER_PATH%\AkelExtImage.dll,18
2 --> Total Commander

-1


 
sfdgsdfgsdfgsdfДата: Суббота, 08.02.2014, 21:03 | Сообщение № 5
Лейтенант

На сайте с: 21.09.2012
Город: Челябинск
Сообщений: 43
Награды: 0
Репутация: 4
Андрей, спасибо большое! Во-первых, скрипт v1.1 с открытием в двух панелях работает отлично.

Поясните только, этот скрипт зависит от версии AutoIt? А о я нашел более свежие версии AutoIt.

Если можно обойтись без AutoIt, это очень хорошо.

В CloneSpy есть функция экспорта списка всех дубликатов в простой текстовый файл. Все дубликаты разделены между собой одной пустой строкой. Что-то типа такого.:

Size Path Date/Time
----------------------------------------------------------------------------------------------------------
6282543 I:\Martial Arts_Part1\Weapon\_Knife Fightng_Ножи и ножевой бой\Каталог ножей 29.01.2009 13:48
6282543 I:\Martial Arts_Part1\Weapon\_Knife Fightng_Ножи и ножевой бой\НОЖИ\Каталоги 16.08.2012 00:50

1053696 I:\Martial Arts_Part1\Weapon\_Bo\Bo (Miikio Nishiuchi) 1-5\Bo-4\Amovie\AMOVI 28.06.2012 23:17
1053696 I:\Martial Arts_Part1\Weapon\_Bo\Bo (Miikio Nishiuchi) 1-5\Bo-2\Amovie\AMOVI 28.06.2012 22:49
1053696 I:\Martial Arts_Part1\Weapon\_Bo\Bo (Miikio Nishiuchi) 1-5\Bo-1\Amovie\AMOVI 28.06.2012 23:03
1053696 I:\Martial Arts_Part1\Weapon\_Bo\Bo (Miikio Nishiuchi) 1-5\Bo-5\Amovie\AMOVI 28.06.2012 23:12
1053696 I:\Martial Arts_Part1\Weapon\_Bo\Bo (Miikio Nishiuchi) 1-5\Bo-3\Amovie\AMOVI 28.06.2012 23:20

Не упростит ли задачу следующий подход. Если автор сделает так, чтобы экспорт делался не общим списком, а для каждой группы дубликатов создавался отдельный текстовый файл с каким-нибудь экзотическим расширением типа csp.

В нем список путей формируется так, как нужно для работы скрипта - построчно или через пробелы или еще как-то.

Итак имеем папку с кучей таких файлов. Ассоциируем расширение csp с каким-нибудь batch-файлом или TC (вам виднее), чтобы по двойному щелчку на csp-файле происходил запуск нужного скрипта и в панелях получали то, что надо. Папку с csp-файлами закрепляем в табе (lock).

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

Я единственное, не нашел все же как открывать несколько файлов в табах Total Commander сразу.

Обычно на компьютере бывает более двух копий файлов. Если это невозможно, то будет чуть больше действий, но все же лучше, чем ничего. Придется прогонять на поиск дубликатов несколько раз. Ваш скрипт v1.1, кстати, работает, если в окне CloneSpy выводится и больше двух дубликатов. Но в панели открывает, конечно, только первых два.

Какой-подход Вам кажется оптимальным, чтобы избавиться от AutoIt и решить проблему с открытием нескольких файлов в табах? Кстати, тут же созрела мысль - если нет такой возможности открытия в нескольких табах, может скрипт запустить несколько копий Total Commander с парой файлов в каждой копии?

Нужно также предупреждение, если таких копий будет больше, скажем 5, что типа Внимание - будет открыто 20 копий TC - Да/Нет?

Какой оптимальный путь?

Добавлено (08.02.2014, 21:03)
---------------------------------------------
О! Кажется нашел решение, как открыть несколько файлов в табах:

Решение

Кажется надо будет сохранять список файлов в формате .tab или передавать с параметром /T.

Прошло 5 минут. Увы, сохранение списка в виде tab не решит проблему, т.к. открываться будут только каталоги с дубликатами, а как установить курсор на нужный файл не понятно. То же с параметром /T


Сообщение отредактировал sfdgsdfgsdfgsdf - Суббота, 08.02.2014, 21:50
 
Andrey_AДата: Суббота, 08.02.2014, 21:33 | Сообщение № 6
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Цитата sfdgsdfgsdfgsdf ()
Какой оптимальный путь?

Самый лучший вариант - это если автор добавит кнопку в каждую группу, которая будет связана с вызовом скрипта vbs, которому будет передан список группы

Цитата sfdgsdfgsdfgsdf ()
не нашел все же как открывать несколько файлов в табах Total Commander сразу.


[helpquote]totalcmd.exe /O /T /L=c:\путьОткрывает в левой панели уже запущенного Total Сommander новую вкладку c каталогом, соответствующим установленному пути.[/helpquote]

Я думаю надо ждать ответа автора, "костылей" можно понаделать, но это будет некрасиво.

[ps]Пусть ещё сделает языковую поддержку. На русском языке разговаривают 300 млн. человек
Как бы я не понимал английский, но такие проги не юзаю без русского, т.к. они связаны с данными на компьютере - не дай бог не туда нажмёшь...[/ps]


 
Andrey_AДата: Суббота, 08.02.2014, 21:52 | Сообщение № 7
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Цитата sfdgsdfgsdfgsdf ()
Увы, сохранение списка в виде tab не решит проблему, т.к. открываться будут только каталоги с дубликатами, а как установить курсор на нужны й файл не понятно.

Необходимо прописывать вместо путей к каталогу - полные пути к файлам и добавлять к ним:

\'
а можно просто
\\
или
\N - где N номер
или
Название вкладки...

Код

Пример:[code][activetabs]
0_path=C:\TC Image\File1.txt\1
0_options=1|3|1|0|0|0|0
1_path=D:\TC Image\File1.txt\2
1_options=1|3|1|0|0|0|0
activetab=1


или так
Код
[activetabs]
0_path=C:\TC Image\File1.txt\Дубликат№1
0_options=1|3|1|0|0|0|0
1_path=D:\TC Image\File2.txt\Дубликат№2
1_options=1|3|1|0|0|0|0
activetab=1


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



.


 
sfdgsdfgsdfgsdfДата: Суббота, 08.02.2014, 22:38 | Сообщение № 8
Лейтенант

На сайте с: 21.09.2012
Город: Челябинск
Сообщений: 43
Награды: 0
Репутация: 4
Я ему уже написал, что Russian просто необходим для нормальной жизни не-Russian :)

Он согласился, изучив ядерный запас нашей страны. Хотя обратное тоже верно :)

Я уже вовсю пользуюсь Вашим скриптом с AutoIt. Просто cупер! Производительность процесса очистки от дубликатов выросла в разы!

Напишу в форум-ру-борда со ссылкой на этот топик - путь народ обрадуется.

1.
Цитата Andrey_A ()
автор добавит кнопку в каждую группу, которая будет связана с вызовом скрипта vbs, которому будет передан список группы


Список группы в виде путей по одному строке или подряд все пути в кавычках и пробелами между ними?

И еще: там вроде есть ограничение по количеству символов в командной строке TC. Написал сюда, чтобы не забыть потом.

Исходя из Вашего последнего поста получается что можно все же загрузить группу файлов в TC.

Может самым быстрым решением для автора будет сделать сохранение путей к группе файлов в указанном Вашем посте формате и сразу в файлы .tab?

Тогда достаточно будет перейти в папку с этими tab- файлами и щелкать на них подряд.

Остается вопрос удобства пользования. Есть + и минусы

Плюсы с кнопкой в самом CloneSpy: видно с какими файлами работаешь.
Минусы: Если список дубликатов очень большой, то иногда вынужден прерывать работу и пересканирование надо делать заново. А с tab-можно продолжить в любой момент.

Каково Ваше мнение? Я ему напишу про оба возможных варианта и буду ждать от него ответа. И потом продолжим.

Пока автору отпишу о найденном Вами решении с AutoIt и дам ссылку, что это Ваш труд. Какие данные ему послать в этом отношении? Напишите мне в приват.

Добавлено (08.02.2014, 22:38)
---------------------------------------------
Проверил скрипт с последней версией AutoIt 3.3.10.1. Работает!

 
Andrey_AДата: Суббота, 08.02.2014, 22:44 | Сообщение № 9
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Цитата sfdgsdfgsdfgsdf ()
Список группы в виде путей по одному строке или подряд все пути в кавычках и пробелами между ними


Разницы нет. Если список по одному в строке, то должен передаваться путь к такому списку

Цитата sfdgsdfgsdfgsdf ()
там вроде есть ограничение по количеству символов в командной строке TC

Передача идёт не тоталу, а скрипту. Неважно что передавать - пусть передаётся путь к файл-списку группы, главное чтобы была передача.

Цитата sfdgsdfgsdfgsdf ()
Может самым быстрым решением для автора будет сделать сохранение путей к группе файлов в указанном Вашем посте формате и сразу в файлы .tab?

Это Вам и автору решать...

Цитата sfdgsdfgsdfgsdf ()
Если список дубликатов очень большой, то иногда вынужден прерывать работу и перетасканирование надо делать заново. А с tab можно продолжить в любой момент.

Я не знаю есть ли ограничения со вкладками - можно сделать искусственный файл таб в 1000 и посмотреть (наверняка есть)

Цитата sfdgsdfgsdfgsdf ()
Каково Ваше мнение?

В вопросах программы самое узкое. Давно не искал дубликаты)))

А что касается автоматизации, то всё изложено. Будут данные - будет движение.
Цитата sfdgsdfgsdfgsdf ()
Какие данные ему послать в этом отношении?

Все данные есть в скрипте


 
sfdgsdfgsdfgsdfДата: Понедельник, 10.02.2014, 19:51 | Сообщение № 10
Лейтенант

На сайте с: 21.09.2012
Город: Челябинск
Сообщений: 43
Награды: 0
Репутация: 4
ОК. Отписал автору. Жду ответа.

Добавлено (10.02.2014, 19:51)
---------------------------------------------
Андрей, автор CloneSpy ответил мне/ Написал вот, что:

Next I have several questions on how to send data to another
program. As we discussed, I would start another program and
hand over a file path as parameter. This would work with TC, for
example. Would this also work with VBS scripts? Or do I need to
trigger a different mechanism to pass a file to a VBS script?
(I didn't work with VBS up to now.)

ПЕРЕВОЖУ: Как я понял, я должен из своей программы запустить другую программу с путем к файлу в качестве параметра. Такой подход будет работать с Total Commander, например. Но будет ли такое же работать с VBS-скриптом? Или же мне надо запустить другой механизм для передачи какого-либо файла VBS-скрипту? (Я не работал с VBS-скриптами до сих пор).

Вся проблема в том, что я абсолютно не программист и не могу объяснить ему, каким образом передать пути файлов VBS-скрипту.

Можете ли Вы написать поподробнее с программистской точки зрения. Если удобнее прямая связь, я даю здесь его E-mail - он, в принципе, рад обсудить этот вопрос с Вами напрямую для быстроты.
.

Зовут его Marcus. Перевод писем можно делать наверно google.translate

Если это сложно для Вас, то тогда продолжим в прежнем режиме и я буду переводить Ваши пояснения ему.

Я готов в любое время принять участие в обсуждении-тестировании.


Сообщение отредактировал sfdgsdfgsdfgsdf - Понедельник, 10.02.2014, 19:56
 
Andrey_AДата: Вторник, 11.02.2014, 02:09 | Сообщение № 11
Генералиссимус

На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7191
Награды: 143
Репутация: 125
Аверин Андрей
Цитата sfdgsdfgsdfgsdf ()
Вся проблема в том, что я абсолютно не программист


Особенно понравилась эта фраза up

Я, кстати, тоже не программист ))) по-набирают по объявлению.... шутка

Цитата sfdgsdfgsdfgsdf ()
Зовут его Marcus

Спасибо, оч. приятно... Но связываться с ним - это ваша задача.

==================================

Как запустить скрипт vbs. Запускающим файлом является wscript.exe, который лежит в %WINDIR%\System32\
В любом языке программирования есть команда запуска Run (или что-то подобное)

Пример запуска:
Run(%WINDIR%\System32\wscript.exe "...\Path\Name.vbs" "параметры")

где параметры - это пути передаваемые скрипту

=================================

[off]sfdgsdfgsdfgsdf, А чем Вас поиск дубликатов в тотале не устраивает? [/off]


 
sfdgsdfgsdfgsdfДата: Понедельник, 17.02.2014, 21:47 | Сообщение № 12
Лейтенант

На сайте с: 21.09.2012
Город: Челябинск
Сообщений: 43
Награды: 0
Репутация: 4
Цитата Andrey_A ()
, кстати, тоже не программист )))


ну ладно - опечатка же. Сами мы не местные действительно.

Я переведу ему Ваше сообщение по поводу запуска. Спасибо за ответ.

Поиск дубликатов в TC имеет свои преимущества, но все же там нет возможностей CloneSpy и других специализированных программ. Или крайне неудобно пользоваться. Они дополняют в общем-то друг друга. И в сумме могут закрыть практически все задачи по этому вопросу.

Добавлено (17.02.2014, 21:47)
---------------------------------------------
Андрей, автор сейчас делает данную опцию. Так что вопрос не закрыт, я просто жду от него реализации, чтобы Вы могли оценить и сделать скрипт. С ув.

Андрей, добрый день! Сегодня автор CloneSpy выпустил новую версию 3.12, в которую внедрил Ваши идеи по работе со скриптами и Total Commander. Спасибо Вам большое! Программа стала просто супер! Лучше нет. К сожалению, с русификацией CloneSpy автор не обнадежил, но если один раз изучить на русской версии, что есть в приведенной ниже теме - дальше в последующих версиях будет все несложно.

Отписал о Вашей помощи в теме по CloneSpy.


Сообщение отредактировал sfdgsdfgsdfgsdf - Суббота, 26.04.2014, 21:31
 
  • Страница 1 из 1
  • 1
Поиск:

Интеллектуальные права и отказ от ответственности