#region: - Options Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion HotKeySet('!{ESC}', '_Pro_Exit'); Закрыть скрипт: Alt + ESC Local $sSerchInDirPath = 'D:\Мои закачки\LIve\RRR\' Local $sFilesSerchRegMask = '.+\.lnk'; Фильтр поиса файлов, заданный в виде регулярного выражения. Local $sDirsSerchRegMask = '.*'; Фильтр поиса директорий, заданный в виде регулярного выражения. Local $sDirCreateLnkPath = 'd:\asdqwd2'; Директория, в которой будут созданы ярлыки. Если 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[10], $rDir, $sFileName, $sLnkDirPath, $sLnkName, $sFileDirPath, $aLnkInfo[7], $sType, $sResult, $hFile $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') $sFileDirPath = StringRegExpReplace($aFilesList[$i], '(.+)\\.+$', '\1') $sLnkName = StringRegExpReplace($sFileName, '(.+)\.+.*$', '\1') & '.lnk' $sLnkDirPath = '' If $sDirCreateLnkPath AND $sDirCreateLnkPath <> -1 AND $sSerchInDirPath <> $sDirCreateLnkPath Then ;~ If $fSaveDirStrct Then $sLnkDirPath = StringTrimLeft($sFileDirPath, 3) ;~ $sLnkDirPath = $sDirCreateLnkPath & '\' & $sLnkDirPath $sLnkDirPath = $sDirCreateLnkPath & StringReplace($sFileDirPath, $sSerchInDirPath, '') Else $sLnkDirPath = $sFileDirPath EndIf $sLnkDirPath = StringRegExpReplace($sLnkDirPath, '\\+$', '') If StringRegExpReplace($aFilesList[$i], '.+\\.*\.(.+)$', '\1') == 'lnk' Then $aLnkInfo = FileGetShortcut($aFilesList[$i]) If NOT $aLnkInfo[1] Then $aLnkInfo[1] = StringRegExpReplace($aLnkInfo[0], '(.+)\\.+$', '\1') Else $aLnkInfo[0] = $aFilesList[$i]; Путь к целевому файлу $aLnkInfo[1] = $sFileDirPath ; Рабочая директория $aLnkInfo[2] = '' ; Аргументы $aLnkInfo[3] = $aFilesList[$i]; Описание EndIf $aLnkInfo[1] = StringRegExpReplace($aLnkInfo[1], '\\+$', '') ReDim $aLnkInfo[15] $aLnkInfo[4] = $sLnkDirPath; Директория создания ярлыка $aLnkInfo[5] = $sLnkDirPath & '\' & $sLnkName; Путь ярлыка $aLnkInfo[6] = $sDirCreateLnkPath For $n=0 To 6 If NOT $aLnkInfo[$n] Then ContinueLoop $aLnkInfo[$n] = StringReplace(StringStripCR($aLnkInfo[$n]), @LF, ' ') $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], '''', '''''') If $n < 2 OR $n > 3 Then $aLnkInfo[$n] = StringReplace($aLnkInfo[$n], '"', '') $aLnkInfo[$n+7] = $aLnkInfo[$n] $aLnkInfo[$n] = '''' & $aLnkInfo[$n] & '''' Next For $n=0 To 5 If $n == 2 Then ContinueLoop For $x=0 To 6 If $x == 2 OR $x == 3 OR $x == $n OR StringLeft($aLnkInfo[$n], 1) == '$'Then ContinueLoop Switch $x Case 0 $sType = '$FP' & $i Case 1 $sType = '$FD' & $i Case 3 $sType = '$De' & $i Case 4 $sType = '$LD' & $i Case 5 $sType = '$LP' & $i Case 6 $sType = '$RD' & StringRegExpReplace($i, '.', ' ') EndSwitch $aLnkInfo[14] = StringReplace($aLnkInfo[$n], $aLnkInfo[$x+7], '') If @extended Then If $aLnkInfo[14] <> '''''' Then $aLnkInfo[$n] = ' & ' & $aLnkInfo[14] Else $aLnkInfo[$n] = '' EndIf $aLnkInfo[$n] = $sType & $aLnkInfo[$n] EndIf Next Next $sResult &= '; ' & $i & @CRLF $sResult &= '$LD' & $i & ' = ' & $aLnkInfo[4] & @CRLF $sResult &= '$LP' & $i & ' = ' & $aLnkInfo[5] & @CRLF $sResult &= '$FD' & $i & ' = ' & $aLnkInfo[1] & @CRLF $sResult &= '$FP' & $i & ' = ' & $aLnkInfo[0] & @CRLF If $aLnkInfo[3] Then $sResult &= '$De' & $i & ' = ' & $aLnkInfo[3] & @CRLF If $aLnkInfo[2] Then $sResult &= '$Ar' & $i & ' = ' & $aLnkInfo[2] & @CRLF $sResult &= @CRLF Next If $sResult == '' Then Return SetError(2) $sResult = 'Opt("TrayIconHide", 1)' & @CRLF & @CRLF & '$RD = ' & $aLnkInfo[6] & '' & @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 & '$Ar = Eval(''Ar'' & $i)' & @CRLF & _ @TAB & '$De = Eval(''De'' & $i)' & @CRLF & _ @TAB & 'If NOT FileExists($LD) Then DirCreate($LD)' & @CRLF & _ @TAB & 'FileCreateShortcut($FP, $LP, $FD, $Ar, $De)' & @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) EndFunc Func _Pro_Exit() Exit EndFunc |