#NoTrayIcon ;2019.02.02 ; ; Что-то вроде Lst2Clip ; ; Параметры: ; --list= - путь к файлу-списку в UTF-16 LE (%WL или %WF), обязательный, должен идти первым; ; --quote - брать имена в двойные кавычки, необязательный; ; --one - всё в одну строку, через пробел, необязательный; ; --pre= - префикс, необязательный; ; --post= - постфикс, необязательный. ; В пре- и постфиксе можно добавить любой символ(ы) юникода по коду (в диапазоне U+0000 - U+FFFF) ; в виде ChrW-<hex-код>, например: ChrW-0020 ; ; Всё с учётом регистра! Всё с пробелами должно быть в кавычках. ; ; Пример: ; --list="%WL" --quote --pre="Трэш и угар " --post=" !" ; на выходе: ; Трэш и угар "path\to\file1" ! ; Трэш и угар "path\to\file2" ! Opt('MustDeclareVars', 1) If $CmdLine[0] = 0 Then MsgBox(48 + 4096, StringTrimRight(@ScriptName, 4), 'Ошибка: Проверьте параметры запуска!' & @CRLF & 'Выходим.') Exit EndIf Local $sFileName, $hFile, $sFile, $aFile, $sTmp, $iQuote = 0, $sDelim = @CRLF, $sPre = '', $sPost = '' If StringLeft($CmdLine[1], 7) == '--list=' Then ;Получаем имя файла-списка $sFileName = __GetCmdValue($CmdLine[1], 7) ;Читаем список $hFile = FileOpen($sFileName, 0 + 32) If $hFile = -1 Then MsgBox(48 + 4096, StringTrimRight(@ScriptName, 4), 'Ошибка: Невозможно открыть файл "' & $sFileName & '".') Exit EndIf $sFile = FileRead($hFile) FileClose($hFile) ;Проверяем конец строки - DOS/Unix/Mac Select Case StringInStr($sFile, @CRLF) > 0 $sTmp = @CRLF Case StringInStr($sFile, @LF) > 0 $sTmp = @LF Case Else $sTmp = @CR EndSelect ;Убираем конечные слэши, если есть $sFile = StringRegExpReplace($sFile, '(?m)(\\$)', '', 0) ;Убираем пустую строку в конце, если есть $sFile = StringStripWS($sFile, 2) ;Помещаем строки в массив $aFile = StringSplit($sFile, $sTmp, 1) If IsArray($aFile) <> 1 Then MsgBox(48 + 4096, StringTrimRight(@ScriptName, 4), 'Ошибка: Что-то не так со списком!' & @CRLF & 'Выходим.') Exit EndIf Else MsgBox(48 + 4096, StringTrimRight(@ScriptName, 4), 'Ошибка: Проверьте параметры запуска!' & @CRLF & 'Выходим.') Exit EndIf ;Префикс, суффикс, кавычки For $i = 2 To $CmdLine[0] If $CmdLine[$i] == '--quote' Then $iQuote = 1 ContinueLoop EndIf If $CmdLine[$i] == '--one' Then $sDelim = ' ' ContinueLoop EndIf If StringLeft($CmdLine[$i], 6) == '--pre=' Then $sPre = __GetCmdValue($CmdLine[$i], 6, 1) ElseIf StringLeft($CmdLine[$i], 7) == '--post=' Then $sPost = __GetCmdValue($CmdLine[$i], 7, 1) Else ContinueLoop EndIf Next ;Обрабатывем список $sFile = '' For $i = 1 To $aFile[0] If $iQuote = 1 Then $sTmp = $sPre & Chr(34) & $aFile[$i] & Chr(34) & $sPost & $sDelim Else $sTmp = $sPre & $aFile[$i] & $sPost & $sDelim EndIf $sFile &= $sTmp Next $sFile = StringStripWS($sFile, 2) ;Копируем в буфер ClipPut($sFile) Func __GetCmdValue($sStr, $iCount, $iU = 0) $sStr = StringTrimLeft($sStr, $iCount) If StringLeft($sStr, 1) = Chr(34) Then $sStr = StringTrimRight(StringTrimLeft($sStr, 1), 1) EndIf If $iU = 1 Then Local $aL = StringSplit($sStr, 'ChrW-', 1) If @error <> 1 Then $sStr = $aL[1] For $i = 2 To $aL[0] $sStr &= ChrW(Number('0x' & StringLeft($aL[$i], 4))) $sStr &= StringTrimLeft($aL[$i], 4) Next EndIf EndIf Return $sStr EndFunc ;==>__GetCmdValue |