#region: - Options Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion HotKeySet('{ESC}', '_Pro_Exit') Local $sSerchInDirPath = 'd:\Обмен' Local $sFilesSerchRegMask = '.+\.lnk' ; Фильтр поиса файлов, заданный в виде регулярного выражения. Local $sDirsSerchRegMask = '.*' ; Фильтр поиса директорий, заданный в виде регулярного выражения. Local $sDirCreateLnkPath = 'd:\qweqwe\' ; Директория, в которой будут созданы ярлыки. Если 0, -1 или пустая строка, то ярлыки будут созданны в той же директории, в которой был найден файл, на который ссылается ярлык. Local $fSaveDirStrct = 1 ; Восстановить в $sDirCreateLnkPath структуру папок, в которых были найденны искомые файлы Local $sAutoItFilePath = 'd:\test2\Shortcut.au3'; Директория, в которой будет создан результирующий AutoIt файл. Если 0, -1 или пустая строка, то будет путь: @ScriptDir\Shortcut.au3 Global $fShowToolTip = 1 ; 1 - показывать подсказки; 0 - не показывать подсказки _CreatShortcutAU3File($sSerchInDirPath, $sFilesSerchRegMask, $sDirsSerchRegMask, $sDirCreateLnkPath, $fSaveDirStrct, $sAutoItFilePath) If @error Then MsgBox(48, 'Ошибка: ' & @error, 'Искомые файлы не найдены') _ToolTip($sAutoItFilePath, 'Ярлычник: Готово!') If $fShowToolTip Then Sleep(2500) Func _CreatShortcutAU3File($sSerchInDirPath, $sFilesSerchRegMask, $sDirsSerchRegMask, $sDirCreateLnkPath, $fSaveDirStrct, $sAutoItFilePath) _ToolTip('подготовка данных ...', 'Ярлычник: Запуск скрипта') Local $i, $n, $x, $aFilesList[1], $sFileName, $sDirPath, $sLnkName, $sLnkDirPath, $rDir, $aLnkInfo[7], $hFile, $sResult, $aResultVar, $sResultVar = '|' $sSerchInDirPath = StringStripWS(StringRegExpReplace($sSerchInDirPath, '\\+$', ''), 1+2) $sDirCreateLnkPath = StringStripWS(StringRegExpReplace($sDirCreateLnkPath, '\\+$', ''), 1+2) $sAutoItFilePath = StringStripWS($sAutoItFilePath, 1+2) $rDir = StringReplace($sSerchInDirPath, '''', '''''') $rDir = StringReplace($rDir, '"', '') _ToolTip('подготовка данных ...', 'Ярлычник: Поиск файлов') $aFilesList = _GetFilesDirsList($sSerchInDirPath, $sFilesSerchRegMask, $sDirsSerchRegMask) If NOT $aFilesList[0] Then Return SetError(1) _ToolTip('готово!', 'Ярлычник: Поиск файлов') _ToolTip('подготовка данных ...', 'Ярлычник: Создание кода') For $i=1 To $aFilesList[0] _ToolTip('осталось ' & ($aFilesList[0]+1)-$i & ' из ' & $aFilesList[0] & ' ...', 'Ярлычник: Создание кода') $sFileName = StringRegExpReplace($aFilesList[$i], '.+\\(.+)$', '\1') $sDirPath = StringRegExpReplace($aFilesList[$i], '(.+)\\.+$', '\1') $sLnkName = StringRegExpReplace($sFileName, '(.+)\.+.*$', '\1') & '.lnk' $sLnkDirPath = '' If $sDirCreateLnkPath AND $sDirCreateLnkPath <> -1 Then If $fSaveDirStrct Then $sLnkDirPath = StringTrimLeft($sDirPath, 3) $sLnkDirPath = $sDirCreateLnkPath & '\' & $sLnkDirPath Else $sLnkDirPath = $sDirPath EndIf $sLnkDirPath = StringRegExpReplace($sLnkDirPath, '\\+$', '\1') If StringRegExpReplace($aFilesList[$i], '.+\\.*\.(.+)$', '\1') == 'lnk' Then $aLnkInfo = FileGetShortcut($aFilesList[$i]) Else $aLnkInfo[0] = $aFilesList[$i]; Путь к целевому файлу $aLnkInfo[1] = $sDirPath ; Рабочая директория $aLnkInfo[2] = '' ; Аргументы $aLnkInfo[3] = $aFilesList[$i]; Описание EndIf $aLnkInfo[4] = $sLnkDirPath; Директория создания ярлыка $aLnkInfo[5] = $sLnkName; Путь ярлыка For $n=0 To 5 $aLnkInfo[$n] = StringReplace(StringStripCR($aLnkInfo[$n]), @LF, ' ') $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], '''', '''''') If $n < 2 OR $n > 3 Then $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], '"', '') If $n == 0 OR $n == 2 OR $n == 5 Then ContinueLoop $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], $rDir, '') If @extended Then $aLnkInfo[$n] = '$rDir' & $i & ' & ' & $aLnkInfo[$n] ContinueLoop EndIf If $n <> 4 Then $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], $aLnkInfo[4], '') If @extended Then $aLnkInfo[$n] = '$LD' & $i & ' & ' & $aLnkInfo[$n] ContinueLoop EndIf EndIf If $n <> 1 Then $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], $aLnkInfo[1], '') If @extended Then $aLnkInfo[$n] = '$FD' & $i & ' & ' & $aLnkInfo[$n] ContinueLoop EndIf EndIf Next $aLnkInfo[5] = '$LD' & $i & ' & ''\' & $aLnkInfo[5] & ''''; Путь ярлыка $aLnkInfo[0] = '$FD' & $i & ' & ''\' & StringRegExpReplace($aLnkInfo[0], '.+\\(.+)$', '\1') & ''''; Путь к целевому файлу $sResult &= '; ' & $i & @CRLF $sResult &= '$LD' & $i & ' = ' & StringRegExpReplace($aLnkInfo[4], '(\$.+\& )*(.+)', '\1''\2''') & @CRLF $sResult &= '$LP' & $i & ' = ' & $aLnkInfo[5] & @CRLF $sResult &= '$FD' & $i & ' = ' & StringRegExpReplace($aLnkInfo[1], '(\$.+\& )*(.+)', '\1''\2''') & @CRLF $sResult &= '$FP' & $i & ' = ' & $aLnkInfo[0] & @CRLF $sResult &= '$Desc' & $i & ' = ' & StringRegExpReplace($aLnkInfo[3], '(\$.+\& )*(.+)', '\1''\2''') & @CRLF $sResult &= '$Args' & $i & ' = ''' & $aLnkInfo[2] & '''' & @CRLF & @CRLF Next If $sResult == '' Then Return SetError(2) $sResult = 'Opt("TrayIconHide", 1)' & @CRLF & @CRLF & '$rDir = ''' & $rDir & '''' & @CRLF & @CRLF & $sResult & @CRLF & @CRLF & '; Creating shortcuts' & @CRLF $sResult &= 'For $i=1 To ' & $aFilesList[0] & @CRLF & _ @TAB & 'ToolTip(''Остался '' & (' & ($aFilesList[0]+1) & '-$i) & '' из '' & ' & $aFilesList[0] & ', 50, 100, ''Создание ярлыков'')' & @CRLF & _ @TAB & '$LD = Eval(''LD'' & $i)' & @CRLF & _ @TAB & '$LP = Eval(''LP'' & $i)' & @CRLF & _ @TAB & '$FD = Eval(''FD'' & $i)' & @CRLF & _ @TAB & '$FP = Eval(''FP'' & $i)' & @CRLF & _ @TAB & '$Args = Eval(''Args'' & $i)' & @CRLF & _ @TAB & '$Desc = Eval(''Desc'' & $i)' & @CRLF & _ @TAB & 'If NOT FileExists($LD) Then DirCreate($LD)' & @CRLF & _ @TAB & 'FileCreateShortcut($FP, $LP, $FD, $Args, $Desc)' & @CRLF & _ 'Next' _ToolTip('запись файла ...', 'Ярлычник: Создание кода') If NOT $sAutoItFilePath OR $sAutoItFilePath == -1 Then $sAutoItFilePath = @ScriptDir & '\' & 'Shortcut.au3' $hFile = FileOpen($sAutoItFilePath, 2+8) FileWrite($hFile, $sResult) FileClose($hFile) _ToolTip('готово!', 'Ярлычник: Создание кода') EndFunc Func _GetFilesDirsList($sSerchInDirPath, $sFilesSerchRegMask='.*', $sDirsSerchRegMask='.*', $iAddFiles=1, $iAddDirs=0, $fSerchInWrongDir=1, $sRootPath=1, $fAddFromRootDir=1) _ToolTip($sSerchInDirPath & ' ...', 'Ярлычник: Поиск файлов') $sSerchInDirPath = StringRegExpReplace($sSerchInDirPath, '\\+$', '') Local $aResultList[1], $aSubResultList[1], $aSub2ResultList[1], $hSerch, $sFileName, $sFilePath, $fAddToResult, $fIsDir, $fDirsSerchRegMask, $fFilesSerchRegMask, $fSerchInWrongDirSub, $fAddFromRootDirSub, $i $aResultList[0] = 0 $hSerch = FileFindFirstFile($sSerchInDirPath & '\' & '*') If @error Then Return SetError(1, 0, $aResultList) If $sRootPath == 1 AND $iAddDirs == 1 AND $fAddFromRootDir Then $aResultList[0] += 1 ReDim $aResultList[$aResultList[0]+1] $aResultList[$aResultList[0]] = $sSerchInDirPath EndIf While 1 $sFileName = FileFindNextFile($hSerch) If @error == 1 Then ExitLoop $sFilePath = $sSerchInDirPath & '\' & $sFileName $fAddToResult = 0 $fIsDir = StringInStr(FileGetAttrib($sFilePath), 'D') $fDirsSerchRegMask = StringRegExp(StringRegExpReplace($sFilePath, '.+\\(.+)$', '\1'), $sDirsSerchRegMask) $fFilesSerchRegMask = StringRegExp(StringRegExpReplace($sFilePath, '.+\\(.+)$', '\1'), $sFilesSerchRegMask) $fAddFromRootDirSub = 1 If NOT $fDirsSerchRegMask Then $fAddFromRootDirSub = 0 If $fIsDir Then If $iAddDirs == 1 AND $fDirsSerchRegMask Then $fAddToResult = 1 Else If $iAddFiles == 1 AND $fFilesSerchRegMask AND $fAddFromRootDir Then $fAddToResult = 1 EndIf If $fAddToResult Then If $sRootPath == 1 AND NOT $fIsDir Then $aResultList[0] += 1 ReDim $aResultList[$aResultList[0]+1] $aResultList[$aResultList[0]] = $sFilePath Else $aSubResultList[0] += 1 ReDim $aSubResultList[$aSubResultList[0]+1] $aSubResultList[$aSubResultList[0]] = $sFilePath EndIf EndIf $fSerchInWrongDirSub = 1 If NOT $fSerchInWrongDir AND $fIsDir AND NOT $fDirsSerchRegMask Then $fSerchInWrongDirSub = 0 $aSub2ResultList[0] = 0 If $fIsDir Then If $fSerchInWrongDirSub Then _ $aSub2ResultList = _GetFilesDirsList($sFilePath, $sFilesSerchRegMask, $sDirsSerchRegMask, $iAddFiles, $iAddDirs, $fSerchInWrongDir, 0, $fAddFromRootDirSub) EndIf If $aSub2ResultList[0] Then For $i = 1 To $aSub2ResultList[0] $aSubResultList[0] += 1 ReDim $aSubResultList[$aSubResultList[0]+1] $aSubResultList[$aSubResultList[0]] = $aSub2ResultList[$i] Next EndIf WEnd FileClose($hSerch) For $i=1 To $aSubResultList[0] $aResultList[0] += 1 ReDim $aResultList[$aResultList[0]+1] $aResultList[$aResultList[0]] = $aSubResultList[$i] Next Return SetError(0, 0, $aResultList) EndFunc Func _ToolTip($sText='', $sTitle='') If $fShowToolTip Then ToolTip($sText, 50, 100, $sTitle) Sleep(1000) EndFunc Func _Pro_Exit() Exit EndFunc |