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
|