Скрипт для посылания в буфер изменённого пути
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Скрипт для посылания в буфер изменённого пути Author: Andrey_ALocation: Сочи PostPosted: Thu Oct 22, 2009 02:48
    —
При тоталовской команде cm_CopyFullNamesToClip (Копировать в буфер имена с полными путями) результат к примеру такой:

c:\Total Commander\LANGUAGE\Wcmd_Rus.inc
c:\Windows\explorer.exe
c:\Program Files\Windows Calendar\WinCal.exe

а хотелось бы получить в буфере обмена после нажатия на кнопку

%COMMANDER_PATH%\LANGUAGE\Wcmd_Rus.inc
%WINDIR%\explorer.exe
%PROGRAMFILES%\Windows Calendar\WinCal.exe

1. хорошо бы, чтобы скрипт можно было дополнять и другими примерами
"Что менять в пути" и "На что менять"

2. хорошо бы, если был бы параметр: брать это всё в ковычки или нет

"%COMMANDER_PATH%\LANGUAGE\Wcmd_Rus.inc"
"%WINDIR%\explorer.exe"
"%PROGRAMFILES%\Windows Calendar\WinCal.exe"

3. хорошо бы, если был бы параметр: Добавка к пути ещё чего нибудь в начале или в конце к примеру резултат был бы

"%PROGRAMFILES%\Windows Calendar\WinCal.exe" "%1"

Спасибо заранее Андрей А А

#2:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Thu Oct 22, 2009 08:29
    —
http://powerpro.wincmd.ru/Scripts/ClipFileList.htm
http://powerpro.wincmd.ru/Scripts/ClipListDialog.htm

#3:  Author: Andrey_ALocation: Сочи PostPosted: Thu Oct 22, 2009 23:17
    —
Спасибо за ссылку, очень интересный скрипт, к сожалению у меня с Power Pro никак не складывается...
Если это возможно, хотелось бы на vbs, или js? недавно попробовал скрипт от AutoHotkey...

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

1.%COMMANDER_PATH%|c:\Total Commander
2.%WINDIR%|c:\Windows
3.%PROGRAMFILES%|c:\Program Files
4. ...|...
5. ...|...

кстати, а может быть задействовать какой-то текстовый редактор?..
С уважением Андрей А А

#4:  Author: Samwatas PostPosted: Thu Oct 22, 2009 23:47
    —
Обрати внимание на AutoIt (скриптовый язык)- там можно и не такое делать (и с тоталом при желании можно подружить). Смотри темы по нему на ру-борде, озоне и т.д. Да и в изучении не такой тяжелый, в общем после небольшой тренировки можешь писать всё, что тебе нужно (а при необходимости задавать вопросы на вышеуказанных форумах, там с радостью помогут).

#5:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Oct 23, 2009 00:04
    —
Andrey_A
Андрей, пользуюсь случаем заметить, что на форумах не принято снабжать (тем более, постоянно) посты подписями типа "С уважением, такой-то". Пост — не письмо, тут свои нормы этикета.

#6:  Author: Loopback PostPosted: Fri Oct 23, 2009 13:18
    —
Идея показалась интересной, написал вот такой скрипт (Autoit):

Code:

Global $aSubst[1][2] = [[0,0]]
Global $sResult = "", $sTemp

; Может быть от 1 до 3-х параметров командной строки
; 1 - список получаемый через %L
; 2 - использовать кавычки или нет (1/0)
; 3 - дополнительная командная строка, если содержит пробелы, то должна быть
; заключена в двойные кавычки. Если в самой строке нужно использовать
; двойные кавычки, используйте две одинарные подряд, они будут заменены на двойные

If $CmdLine[0] = 0 Then Exit

; Тут задаем замены
; Если второй параметр не задан, первый трактуется
; как переменная окружения и путь замены берется из системы
_Add("COMMANDER_PATH")
_Add("WINDIR")
_Add("PROGRAMFILES")
; А если задан, то производится простая замена
_Add("НА ЧТО МЕНЯТЬ", "ЧТО МЕНЯТЬ")

$aList = _TCHLoadFileList($CmdLine[1])

; Проверим, нет ли в наших путях строки
For $i = 1 To $aList[0]
    For $j = 1 To $aSubst[0][0]
        If StringInStr($aList[$i],  $aSubst[$j][0]) > 0 Then
            $sTemp = StringReplace($aList[$i], $aSubst[$j][0], $aSubst[$j][1])
            If $CmdLine[0] > 1 And $CmdLine[2] = 1 Then $sTemp = '"' & $sTemp & '"'
            If $CmdLine[0] = 3 Then $sTemp &= ' ' & StringReplace($CmdLine[3], "''", '"')
            $sResult &= $sTemp & @CRLF
            ExitLoop
        EndIf
    Next
Next

; Уберем лишний перенос строки и скопируем в буфер
ClipPut(StringTrimRight($sResult, 2))

Func _Add($sSubst, $sReplace = Default)
    $aSubst[0][0] += 1
    ReDim $aSubst[$aSubst[0][0]+1][2]
    If @NumParams = 1 Then
        $aSubst[$aSubst[0][0]][0] = EnvGet($sSubst)
        $aSubst[$aSubst[0][0]][1] = "%" & $sSubst & "%"
    Else
        $aSubst[$aSubst[0][0]][0] = $sReplace
        $aSubst[$aSubst[0][0]][1] = $sSubst
    EndIf
EndFunc

; Load to array list of files, received with %L or %l TC macro
Func _TCHLoadFileList($sFileName)
    Local $asList[1] = [0]
    Local $hfList = FileOpen($sFileName, 0)
    While 1
        $sLine = FileReadLine($hfList)
        If @error Then Exitloop
        ReDim $asList[UBound($asList)+1]
        $asList[UBound($asList)-1] = $sLine
    Wend
    FileClose($hfList)
    $asList[0] = UBound($asList)-1
    Return $asList
EndFunc


#7:  Author: Andrey_ALocation: Сочи PostPosted: Sun Oct 25, 2009 18:13
    —
Loopback, спаибо за скрипт, к сожалению, я попробовать его не могу, с Autoit встречаюсь впервые, если не трудно подскажи расширение файла и как его запустить...

#8:  Author: Samwatas PostPosted: Mon Oct 26, 2009 08:13
    —
Расширение - *.au3
Для начала скачай сам АвтоИт - http://www.autoitscript.com/autoit3/downloads.shtml

Потом скрипты можно компилировать в *.exe и запускать на системах без АвтоИта

#9:  Author: Andrey_ALocation: Сочи PostPosted: Tue Oct 27, 2009 02:15
    —
Скрипт заработал, правда не все переменные определились автоматом, но отличная возможность прописать вручную Что на Что менять позволило почти всё что я хотел реализовать.
Loopback спасибо

#10:  Author: FlasherLocation: Москва PostPosted: Fri Feb 19, 2010 20:56
    —
Loopback wrote:
Может быть от 1 до 3-х параметров командной строки
; 1 - список получаемый через %L
; 2 - использовать кавычки или нет (1/0)
; 3 - дополнительная командная строка, если содержит пробелы, то должна быть
; заключена в двойные кавычки. Если в самой строке нужно использовать
; двойные кавычки, используйте две одинарные подряд, они будут заменены на двойные
Loopback, поясни, пожалуйста, какие именно параметры(2,3; с %L понятно), в каком виде? Что подразумевается под дополнительной ком.строкой? Покажи на примере с кавычками, если не трудно.

#11:  Author: Loopback PostPosted: Sun Feb 21, 2010 21:41
    —
Flasher wrote:
Loopback, поясни, пожалуйста, какие именно параметры(2,3; с %L понятно), в каком виде? Что подразумевается под дополнительной ком.строкой?

Всё в соответствии с "техзаданием" в первом посте. Включение второго параметра даст результат как в пункте 2, а третьего - как в пункте 3.
Например, запуск с ключами
Code:

%L 1 %%1

даст результат
Code:

"%PROGRAMFILES%\Windows Calendar\WinCal.exe" %1


а с ключами
Code:

%L 0 ''%%1''

даст результат
Code:

%PROGRAMFILES%\Windows Calendar\WinCal.exe "%1"

#12:  Author: FlasherLocation: Москва PostPosted: Wed Feb 24, 2010 05:47
    —
Спасибо! Теперь я понял что такое (1/0).Smile
Помимо тех трёх я добавил:
_Add("COMMANDER_DRIVE")
_Add("COMMANDER_INI")
_Add("APPDATA")
_Add("HOMEDRIVE")
_Add("HOMEPATH")
_Add("SYSTEMDRIVE")
_Add("DRIVE_X")
_Add("TEMP")
_Add("USERPROFILE")

_Add("DRIVE_X") - Тут надо понимать, что для работы скрипта на дисках, не связанных с переменными окружения ТС, необходимо предварительно создать похожие переменные для тех букв дисков, в директориях которых будет срабатывать команда. Делается это просто с помощью плагина Environment Variables, в группе Current process (Total Commander), где, например, Name: DRIVE_X | Value: X:\

#13:  Author: Andrey_ALocation: Сочи PostPosted: Tue Oct 12, 2010 09:36
    —
Недавно столкнулся с более сложной задачей по изменению пути,
просто надоело вводить в разных местах одно и тоже, что связано с путями и именами...
а потом вспомнил про скрипт Loopback, которым пользуюсь постоянно и он прекрасно работает, как и многие скрипты от этого автора и решил немного его изменить... пришлось прикоснуться к скриптингу .au3 - мне понравилось.
Выкладываю творение, это мой первый скрипт на этом Aу3ыке, поэтому если какие ошибки найдёте - смело сообщайте. В архив добавил иконки для кнопок, может кому пригодится:
Всю подробную информацию и примеры использования читайте в скрипте
http://rghost.ru/2892713

#14:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Oct 12, 2010 13:27
    —
Andrey_A
А, хотя бы, вкратце можно узнать о назначении скрипта?

Кстати, поднятую автором топика задачу можно частично решить с помощью скрипта
Code:
With CreateObject("TCScript.Helper")
  .SendCommand "cm_CopyFullNamesToClip", True
  .SetTextToClip(Replace(.GetTextFromClip, WScript.Arguments(0), WScript.Arguments(1), 1, -1, 1))
End With
и кнопки
Quote:
TOTALCMD#BAR#DATA
C:\Путь\к\скрипту\Скрипт.vbs "%Commander_Path%"
"%%Commander_Path%%"
%Commander_Path%\WCMICONS.DLL,14
Хитрое копирование имён



-1

Синим цветом - свой путь к скрипту, зелёным - значения по желанию.

#15:  Author: FlasherLocation: Москва PostPosted: Tue Oct 12, 2010 13:37
    —
Andrey_A
11 параметров?!? Shocked Просто скрипт-мутант какой-то получился. Smile
Много расписано, но несколько запутанно, "без поллитра" не разберёшься. Wink
А что за "библиотека поиска и замен (ваша библиотека)"? Чего с ней делать? Да вообще много путаницы. Может стоит просто в теме "Обмен кнопками" написать штук 10-15 со ссылкой на скрипт, а скрипт в UUE тут выложить? Всем заинтересованным сразу полегчает. Smile



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


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

Goto page 1, 2, 3  Next  :| |:
Page 1 of 3

Powered by phpBB © 2001, 2005 phpBB Group