;~ Opt("TrayIconHide", 1) Opt('TrayIconDebug', 1) Local $sPath_DirSerchLnk = 'd:\Обмен' Local $sSerchFile_RegMask = '.+\.lnk' Local $sPath_DirCreateLnk = 'd:\qweqwe\'; -1: создовать ярлыки в той же папки, где были найденны файлы. Либо можно задать любую папку, в которой будут создоваться ярлыки Local $sPath_FileSaveAu3 = 'c:\test2\Shortcut.au3' $sPath_DirSerchLnk = StringRegExpReplace($sPath_DirSerchLnk, '\\+$', '') $sPath_DirCreateLnk = StringRegExpReplace($sPath_DirCreateLnk, '\\+$', '') _CreatShortcutAU3File($sPath_DirSerchLnk, $sSerchFile_RegMask, $sPath_DirCreateLnk, $sPath_FileSaveAu3) If @error Then MsgBox(48, 'Ошибка: ' & @error, 'Искомые файлы не найдены') Func _CreatShortcutAU3File($sPathDirSerchLnk, $sSerchFileRegMask, $sPathDirCreateLnk, $sPathFileSaveAu3) Local $aFilesList, $aFileInfo[7], $sPathFileLnk, $sDirFileLnk, $sShortcut, $hFile $aFilesList = _GetDirsFilesList($sPathDirSerchLnk, $sSerchFileRegMask) If @error == -1 Then Return SetError(1) For $i=1 To UBound($aFilesList)-1 $aFileInfo = FileGetShortcut($aFilesList[$i]) $sPathFileLnk = StringRegExpReplace($aFileInfo[0], '(.+?)\.[^\\\/:\*\?\"\<\>\|]*', '\1.lnk') If @extended < 1 Then $sPathFileLnk = $aFileInfo[0] & '.lnk' If $sPathDirCreateLnk <> -1 AND StringStripWS($sPathDirCreateLnk, 8) <> '' Then $sPathFileLnk = StringRegExpReplace($sPathFileLnk, '.+\\(.+)', StringReplace($sPathDirCreateLnk, '\', '\\') & '\\\1') $sShortcut &= 'FileCreateShortcut("' & $aFileInfo[0] & '", "' & $sPathFileLnk & '", "' & $aFileInfo[1] & '", "' & $aFileInfo[2] & '", "' & $aFileInfo[3] & '", "' & $aFileInfo[4] & '")' & @CRLF Next If $sShortcut == '' Then Return SetError(2) If StringStripWS($sPathFileSaveAu3, 8) == '' Then $sPathFileSaveAu3 = @ScriptDir & '\' & 'Shortcut.au3' $sDirFileLnk = StringRegExpReplace($sPathFileLnk, '(.+)\\.+', '\1') $sShortcut = 'Opt("TrayIconHide", 1)' & @CRLF & @CRLF & 'If NOT FileExists("' & $sDirFileLnk & '") Then DirCreate("' & $sDirFileLnk & '")' & @CRLF & @CRLF & $sShortcut $hFile = FileOpen($sPathFileSaveAu3, 2+8) FileWrite($hFile, $sShortcut) FileClose($hFile) EndFunc Func _GetDirsFilesList($sStartDirPath, $sRegMask, $iAddFiles=1, $iAddDirs=0, $sRootPath=1) $sStartDirPath = StringRegExpReplace($sStartDirPath, '\\+$', '') Local $aRetArray[1], $aSubDirsArr, $sFindNextFile, $sCurrentPath, $iYesAdd Local $sFindFirstFile = FileFindFirstFile($sStartDirPath & '\' & '*') If @error = 1 Then Return SetError(-1) If $sRootPath == 1 AND $iAddDirs == 1 Then $aRetArray[0] += 1 ReDim $aRetArray[2] $aRetArray[1] = $sStartDirPath EndIf While 1 $sFindNextFile = FileFindNextFile($sFindFirstFile) If @error = 1 Then ExitLoop $sCurrentPath = $sStartDirPath & '\' & $sFindNextFile $iYesAdd = 0 If StringInStr(FileGetAttrib($sCurrentPath), 'D') Then If $iAddDirs == 1 Then $iYesAdd = 1 Else If $iAddFiles == 1 Then $iYesAdd = 1 EndIf If NOT StringRegExp(StringRegExpReplace($sCurrentPath, '.+\\(.+)', '\1'), $sRegMask) Then $iYesAdd = 0 If $iYesAdd == 1 Then $aRetArray[0] += 1 ReDim $aRetArray[$aRetArray[0]+1] $aRetArray[$aRetArray[0]] = $sCurrentPath EndIf $aSubDirsArr = _GetDirsFilesList($sCurrentPath, $sRegMask, $iAddFiles, $iAddDirs, 0) If IsArray($aSubDirsArr) Then For $i = 1 To $aSubDirsArr[0] $aRetArray[0] += 1 ReDim $aRetArray[$aRetArray[0]+1] $aRetArray[$aRetArray[0]] = $aSubDirsArr[$i] Next EndIf WEnd FileClose($sFindFirstFile) SetError(0) Return $aRetArray EndFunc |