Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Скрипт для посылания в буфер изменённого пути 
Author Message
Loopback



PostPosted: Fri Oct 23, 2009 13:18    Post subject: Reply with quote

Идея показалась интересной, написал вот такой скрипт (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

View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group