Страница 1 из 3
Скрипт для посылания в буфер изменённого пути
Добавлено: Чт окт 22, 2009 02:48
Andrey_A
При тоталовской команде 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"
Спасибо заранее Андрей А А
Добавлено: Чт окт 22, 2009 08:29
Вахмурка
Добавлено: Чт окт 22, 2009 23:17
Andrey_A
Спасибо за ссылку, очень интересный скрипт, к сожалению у меня с Power Pro никак не складывается...
Если это возможно, хотелось бы на vbs, или js? недавно попробовал скрипт от AutoHotkey...
Но самое главное, что хотелось - это чтобы в начале скрипта, или в отдельном файле была возможность прописать сколько угодно "замен", скрипт бы поочерёдно сканировал всё это и изменял нашедшее в выделенных путях, и выдавал всё это в буфер
1.%COMMANDER_PATH%|c:\Total Commander
2.%WINDIR%|c:\Windows
3.%PROGRAMFILES%|c:\Program Files
4. ...|...
5. ...|...
кстати, а может быть задействовать какой-то текстовый редактор?..
С уважением Андрей А А
Добавлено: Чт окт 22, 2009 23:47
Samwatas
Обрати внимание на AutoIt (скриптовый язык)- там можно и не такое делать (и с тоталом при желании можно подружить). Смотри темы по нему на ру-борде, озоне и т.д. Да и в изучении не такой тяжелый, в общем после небольшой тренировки можешь писать всё, что тебе нужно (а при необходимости задавать вопросы на вышеуказанных форумах, там с радостью помогут).
Добавлено: Пт окт 23, 2009 00:04
Avada
Andrey_A
Андрей, пользуюсь случаем заметить, что на форумах не принято снабжать (тем более, постоянно) посты подписями типа "С уважением, такой-то". Пост — не письмо, тут свои нормы этикета.
Добавлено: Пт окт 23, 2009 13:18
Loopback
Идея показалась интересной, написал вот такой скрипт (Autoit):
Код: Выделить всё
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
Добавлено: Вс окт 25, 2009 17:13
Andrey_A
Loopback, спаибо за скрипт, к сожалению, я попробовать его не могу, с Autoit встречаюсь впервые, если не трудно подскажи расширение файла и как его запустить...
Добавлено: Пн окт 26, 2009 07:13
Samwatas
Расширение - *.au3
Для начала скачай сам АвтоИт -
http://www.autoitscript.com/autoit3/downloads.shtml
Потом скрипты можно компилировать в *.exe и запускать на системах без АвтоИта
Добавлено: Вт окт 27, 2009 01:15
Andrey_A
Скрипт заработал, правда не все переменные определились автоматом, но отличная возможность прописать вручную Что на Что менять позволило почти всё что я хотел реализовать.
Loopback спасибо
Добавлено: Пт фев 19, 2010 19:56
Flasher
Loopback писал(а):Может быть от 1 до 3-х параметров командной строки
; 1 - список получаемый через %L
; 2 - использовать кавычки или нет (1/0)
; 3 - дополнительная командная строка, если содержит пробелы, то должна быть
; заключена в двойные кавычки. Если в самой строке нужно использовать
; двойные кавычки, используйте две одинарные подряд, они будут заменены на двойные
Loopback, поясни, пожалуйста, какие именно параметры(2,3; с %L понятно), в каком виде? Что подразумевается под дополнительной ком.строкой? Покажи на примере с кавычками, если не трудно.
Добавлено: Вс фев 21, 2010 20:41
Loopback
Flasher писал(а):Loopback, поясни, пожалуйста, какие именно параметры(2,3; с %L понятно), в каком виде? Что подразумевается под дополнительной ком.строкой?
Всё в соответствии с "техзаданием" в первом посте. Включение второго параметра даст результат как в пункте 2, а третьего - как в пункте 3.
Например, запуск с ключами
даст результат
Код: Выделить всё
"%PROGRAMFILES%\Windows Calendar\WinCal.exe" %1
а с ключами
даст результат
Код: Выделить всё
%PROGRAMFILES%\Windows Calendar\WinCal.exe "%1"
Добавлено: Ср фев 24, 2010 04:47
Flasher
Спасибо! Теперь я понял что такое (1/0).

Помимо тех трёх я добавил:
_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:\
Добавлено: Вт окт 12, 2010 09:36
Andrey_A
Недавно столкнулся с более сложной задачей по изменению пути,
просто надоело вводить в разных местах одно и тоже, что связано с путями и именами...
а потом вспомнил про скрипт
Loopback, которым пользуюсь постоянно и он прекрасно работает, как и многие скрипты от этого автора и решил немного его изменить... пришлось прикоснуться к скриптингу .au3 - мне понравилось.
Выкладываю творение, это мой первый скрипт на этом Aу3ыке, поэтому если какие ошибки найдёте - смело сообщайте. В архив добавил иконки для кнопок, может кому пригодится:
Всю подробную информацию и примеры использования читайте в скрипте
http://rghost.ru/2892713
Добавлено: Вт окт 12, 2010 13:27
Batya
Andrey_A
А, хотя бы, вкратце можно узнать о назначении скрипта?
Кстати, поднятую автором топика задачу можно частично решить с помощью скрипта
Код: Выделить всё
With CreateObject("TCScript.Helper")
.SendCommand "cm_CopyFullNamesToClip", True
.SetTextToClip(Replace(.GetTextFromClip, WScript.Arguments(0), WScript.Arguments(1), 1, -1, 1))
End With
и кнопки
TOTALCMD#BAR#DATA
C:\Путь\к\скрипту\Скрипт.vbs "%Commander_Path%"
"%%Commander_Path%%"
%Commander_Path%\WCMICONS.DLL,14
Хитрое копирование имён
-1
Синим цветом - свой путь к скрипту, зелёным - значения по желанию.
Добавлено: Вт окт 12, 2010 13:37
Flasher
Andrey_A
11 параметров?!?

Просто скрипт-мутант какой-то получился.
Много расписано, но несколько запутанно, "без поллитра" не разберёшься.

А что за "библиотека поиска и замен (ваша библиотека)"? Чего с ней делать? Да вообще много путаницы. Может стоит просто в теме "Обмен кнопками" написать штук 10-15 со ссылкой на скрипт, а скрипт в UUE тут выложить? Всем заинтересованным сразу полегчает.
