What about the world lacking and needing "Batch adjust shortcut targets"???
But what you are doing is copying the files with a
new name to a
new destination.
It would be easier to create a new shortcut.
Is the folder structure for the images and the shortcuts the same?
If so then try this: BSC (nothing to do with cows)

Instructions:
Honestly, do you really want some?
Oh OK, it creates shortcuts in the Destination directory of whatever
files are in the Source directory complete with directory structure - Bulk Shortcut Creator.
And yes, that is a cow icon

Also BSM in the other archive

BSC source:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=cow.ico
#AutoIt3Wrapper_Outfile=BSC.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <ProgressConstants.au3>
#Include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include 'RecFileListToArray.au3'
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("BSC v0.1", 349, 180, 192, 124)
$Go = GUICtrlCreateButton("Go", 255, 137, 75, 25)
GUICtrlSetTip(-1, 'Starts shortcut creation')
$Button1 = GUICtrlCreateButton("Source", 280, 13, 50, 25)
GUICtrlSetTip(-1, 'Select a source folder to create' & @CRLF & 'shortcuts for files')
$Button2 = GUICtrlCreateButton("Dest", 280, 56, 50, 25)
GUICtrlSetTip(-1, 'Select a destination folder to put' & @CRLF & 'the shortcuts in')
$progress = GUICtrlCreateProgress(15, 96, 314, 17)
$Input1 = GUICtrlCreateInput("", 16, 14, 258, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
$Input2 = GUICtrlCreateInput("", 17, 57, 256, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
$cRecurse = GUICtrlCreateCheckbox("Recurse", 152, 127, 66, 17)
GUICtrlSetTip(-1, 'Recurse down through folder structure')
$Input3 = GUICtrlCreateInput("*.*", 16, 139, 121, 21)
GUICtrlSetTip(-1, 'Wildcard filter for files to' & @CRLF & 'create shortcuts for')
$oDir = GUICtrlCreateCheckbox("One folder", 152, 151, 79, 17)
GUICtrlSetTip(-1, 'Outputs shortcuts to destination folder,' & @CRLF & 'does not duplicate folder tree')
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $cRecurse
If (GUICtrlRead($cRecurse) = 1) Then
GUICtrlSetState($oDir, $GUI_ENABLE)
Else
GUICtrlSetState($oDir, $GUI_UNCHECKED)
GUICtrlSetState($oDir, $GUI_DISABLE)
EndIf
Case $Button1
$sPath = FileSelectFolder('Source folder:', '', 4)
If @error = 1 Then $sPath = ''
GUICtrlSetData($Input1, $sPath)
Case $Button2
$dPath = FileSelectFolder('Destination folder:', '', 4)
If @error = 1 Then $dPath = ''
GUICtrlSetData($Input2, $dPath)
Case $Go
If $sPath <> '' And $dPath <> '' Then
$filter = GUICtrlRead($Input3)
If (GUICtrlRead($cRecurse) = 1) Then
If Not (GUICtrlRead($oDir) = 1) Then
$output = _RecFileListToArray($sPath, '*', 2, 1, 0, 1, '*.lnk')
_DupeTree($sPath, $dPath)
EndIf
$output = _RecFileListToArray($sPath, $filter, 1, 1, 0, 1, '*.lnk')
Else
$output = _RecFileListToArray($sPath, $filter, 1, 0, 0, 1, '*.lnk')
EndIf
_BSC($sPath, $dPath, (GUICtrlRead($oDir) = 1))
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _BSC($src, $dest, $oneDir = 0)
$prg = 0
$diff = 100 / $output[0]
GUICtrlSetData($progress, $prg)
For $i = 1 To $output[0]
If $oneDir = 0 Then
$temp = $dest & '\' & $output[$i]
Else
$temp = $dest & StringMid($output[$i], StringInStr($output[$i], '\', 0, -1))
EndIf
FileCreateShortcut($src & '/' & $output[$i], $temp)
$prg += $diff
GUICtrlSetData($progress, $prg)
Next
EndFunc
Func _DupeTree($src, $dest)
Local $i
For $i = 1 To $output[0]
If Not FileExists($dest & '\' & $output[$i]) Then DirCreate($dest & '\' & $output[$i])
Next
EndFunc
BSM source:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=BSM.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Fileversion=0.7.0.4
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiStatusBar.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <Array.au3>
#include <Date.au3>
#include <File.au3>
Global $inifile = StringLeft(@ScriptName, StringLen(@ScriptName) - 4) & '.ini'
Global $iSRC = 'C:\', $iPRS = '(.*)', $iPRR = '\1', $iNRS = '(.*)', $iNRR = '\1', $iREC = False, $iTST = False
_GetIni()
#Region ### START Koda GUI section ### Form=
$guiBSM = GUICreate("BSM v0.7", 354, 251)
$Go = GUICtrlCreateButton("Go", 256, 193, 75, 25)
GUICtrlSetTip(-1, "Starts shortcut modification")
$Button1 = GUICtrlCreateButton("Folder", 280, 13, 50, 25)
GUICtrlSetTip(-1, "Folder with shortcuts")
$progress = GUICtrlCreateProgress(16, 152, 314, 17)
$Input1 = GUICtrlCreateInput($iSRC, 16, 14, 258, 21, $GUI_SS_DEFAULT_INPUT)
$cRecurse = GUICtrlCreateCheckbox("Recurse", 170, 194, 66, 17)
If $iREC Then GUICtrlSetState($cRecurse, $GUI_CHECKED)
GUICtrlSetTip(-1, "Recurse down through folder structure")
$cTest = GUICtrlCreateCheckbox("Test", 90, 190, 56, 25)
If $iTST Then GUICtrlSetState($cTest, $GUI_CHECKED)
GUICtrlSetTip(-1, "Display test output")
$labelRx = GUICtrlCreateLabel("RegEx", 19, 196, 36, 17)
GUICtrlSetTip(-1, "Click to open browser at RegEx page")
GUICtrlSetColor(-1, '0x000099')
$Input2 = GUICtrlCreateInput($iPRS, 16, 80, 140, 21)
GUICtrlSetTip(-1, "Path RegEx to search for")
$Input4 = GUICtrlCreateInput($iPRR, 16, 110, 140, 21)
GUICtrlSetTip(-1, "Path RegEx replacement text")
$Input5 = GUICtrlCreateInput($iNRS, 190, 80, 140, 21)
GUICtrlSetTip(-1, "Name RegEx to search for")
$Input6 = GUICtrlCreateInput($iNRR, 190, 110, 140, 21)
GUICtrlSetTip(-1, "Name RegEx replacement text")
GUICtrlCreateLabel("Path of target", 52, 48, 70, 17)
GUICtrlCreateLabel("Name of target", 215, 49, 75, 17)
GUICtrlCreateLabel("Old", 160, 85, 25, 21, $SS_CENTER)
GUICtrlCreateLabel("New", 160, 115, 25, 21, $SS_CENTER)
$StatusBar1 = _GUICtrlStatusBar_Create($guiBSM)
WinMove("BSM v0.7", '', IniRead($inifile, 'Main', 'XPos', 20), IniRead($inifile, 'Main', 'YPos', 20))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $labelRx
ShellExecute('http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm')
Case $Button1
$iSRC = FileSelectFolder('Select folder:', '', 4)
If @error = 1 Then $iSRC = ''
GUICtrlSetData($Input1, $iSRC)
Case $Go
$iSRC = GUICtrlRead($Input1)
If Not FileExists($iSRC) Then
MsgBox(48, 'BSM Error', 'Not a valid path')
Else
$output = ''
GUICtrlSetData($progress, 0)
$iPRS = GUICtrlRead($Input2)
$iPRR = GUICtrlRead($Input4)
$iNRS = GUICtrlRead($Input5)
$iNRR = GUICtrlRead($Input6)
If $iPRS = '' Then $iPRS = '(.*)'
If $iPRR = '' Then $iPRR = '\1'
If $iNRS = '' Then $iNRS = '(.*)'
If $iNRR = '' Then $iNRR = '\1'
If $iSRC <> '' Then
_GUICtrlStatusBar_SetText($StatusBar1, 'Finding shortcuts')
Global $start = TimerInit()
If (GUICtrlRead($cRecurse) = 1) Then
$output = _FileListToArrayPlus($iSRC, "*.lnk", 1, 0, "", 2, True)
Else
$output = _FileListToArrayPlus($iSRC, "*.lnk", 1, 0, "", 2, False)
EndIf
If @error = 0 Or IsArray($output) Then
_BSM($output, (GUICtrlRead($cTest) = 1))
Else
MsgBox(48, 'BSM Error', 'No shortcuts found')
EndIf
EndIf
EndIf
Case $GUI_EVENT_CLOSE
$wPos = WinGetPos("BSM v0.7")
IniWrite($inifile, 'Main', 'Folder', $iSRC)
IniWrite($inifile, 'Main', 'PathSearch', $iPRS)
IniWrite($inifile, 'Main', 'PathReplace', $iPRR)
IniWrite($inifile, 'Main', 'NameSearch', $iNRS)
IniWrite($inifile, 'Main', 'NameReplace', $iNRR)
IniWrite($inifile, 'Main', 'Recurse', (GUICtrlRead($cRecurse) = 1))
IniWrite($inifile, 'Main', 'Test', (GUICtrlRead($cTest) = 1))
IniWrite($inifile, 'Main', 'XPos', $wPos[0])
IniWrite($inifile, 'Main', 'YPos', $wPos[1])
Exit
EndSwitch
WEnd
Func _BSM($files, $test = False)
Local $j = 1, $target, $targetPath, $newTarget, $newWorking, $prg = 1, $fDScut = 0, $fDLog = '', $fCScut = 0, $fCLog = '', $max, $nMsg2
Local $Percent, $Percent_prev, $interrupt = False
Dim $temp[101][2]
$max = $files[0]
Switch $test
Case True
_GUICtrlStatusBar_SetText($StatusBar1, 'Creating test output')
If $files[0] > 100 Then $max = 100
Case Else
_GUICtrlStatusBar_SetText($StatusBar1, 'Processing ' & $max & ' shortcuts')
EndSwitch
GUICtrlSetData($Go, 'Stop')
For $i = 1 To $max
$nMsg2 = GUIGetMsg()
Switch $nMsg2
Case $Go
$interrupt = True
ExitLoop
Case Else
$details = FileGetShortcut($files[$i])
If $details[0] = "" Then
_ArrayDelete($files, $i)
$max -= 1
$i -= 1
Else
$targetPath = StringLeft($details[0], StringInStr($details[0], '\', 0, -1) - 1)
$target = StringMid($details[0], StringInStr($details[0], '\', 0, -1) + 1)
$newTarget = StringRegExpReplace($targetPath, $iPRS, $iPRR) & '\' & StringRegExpReplace($target, $iNRS, $iNRR)
$newWorking = StringRegExpReplace($details[1], $iPRS, $iPRR)
Select
Case $test
$temp[$i][0] = $details[0]
$temp[$i][1] = $newTarget
$temp[0][0] = $i
Case Else
If FileDelete($files[$i]) Then
If Not FileCreateShortcut($newTarget, $files[$i], $newWorking, $details[2], $details[3], $details[4], '', $details[5], $details[6]) Then
$fCScut += 1
$fCLog &= $files[$i] & @CRLF
EndIf
Else
$fDScut += 1
$fDLog &= $files[$i] & @CRLF
EndIf
EndSelect
$Percent = Round(($i / $max) * 100, 0)
If $Percent <> $Percent_prev Then
GUICtrlSetData($progress, $Percent)
$Percent_prev = $Percent
EndIf
EndIf
EndSwitch
Next
GUICtrlSetData($Go, 'Go')
If $interrupt Then
_GUICtrlStatusBar_SetText($StatusBar1, 'Interrupted')
Else
_GUICtrlStatusBar_SetText($StatusBar1, 'Finished: ' & Round(TimerDiff($start) / 1000, 1) & ' seconds')
EndIf
If $test Then
_ArrayBox($temp, 1, 'BSM Test Output', '|Old Shortcut Target|New Shortcut Target', True)
Else
If $fDScut > 0 Or $fCScut > 0 Or $interrupt Then
_Log($fCLog, $fCScut, $fDLog, $fDScut, $files[0], $interrupt)
Else
MsgBox(64, 'BSM Results', 'Total shortcuts: ' & $files[0] & @CRLF & 'No failures during Delete/Create')
EndIf
EndIf
GUICtrlSetData($progress, 0)
EndFunc ;==>_BSM
Func _Log($cl, $cc, $dl, $dc, $tot, $int)
Local $fLog = FileOpen(@TempDir & '\BSM.log', 138)
If $fLog = -1 Then
MsgBox(64, 'BSM Error', 'Unable to open log file:' & @CRLF & @TempDir & '\BSM.log' & @CRLF & 'for output')
Else
FileWrite($fLog, 'BSM results ' & _Now() & @CRLF & 'Total shortcuts: ' & $tot & @CRLF & @CRLF)
If $int Then FileWrite($fLog, '**** INTERRUPTED ****' & @CRLF & @CRLF)
FileWrite($fLog, 'Shortcuts that failed to be deleted: ' & $dc & @CRLF)
If $dc > 0 Then FileWrite($fLog, $dl & @CRLF & @CRLF)
FileWrite($fLog, 'Shortcuts that failed to be created: ' & $cc & @CRLF)
If $cc > 0 Then FileWrite($fLog, $cl & @CRLF & @CRLF)
FileClose($fLog)
ShellExecuteWait(@TempDir & '\BSM.log')
EndIf
EndFunc ;==>_Log
Func _GetIni()
If FileExists($inifile) Then
$iSRC = IniRead($inifile, 'Main', 'Folder', 'C:\')
$iPRS = IniRead($inifile, 'Main', 'PathSearch', '(.*)')
$iPRR = IniRead($inifile, 'Main', 'PathReplace', '\1')
$iNRS = IniRead($inifile, 'Main', 'NameSearch', '(.*)')
$iNRR = IniRead($inifile, 'Main', 'NameReplace', '\1')
$iREC = IniRead($inifile, 'Main', 'Recurse', 'False')
$iTST = IniRead($inifile, 'Main', 'Test', 'False')
EndIf
EndFunc ;==>_GetIni
;===============================================================================
;
; Function Name: _ArrayBox()
; Description: Shows an array in a GUI window. Improved version of _ArrayDisplay
; Parameter(s): $Array - An array, 1d or 2d, 0-based or 1-based
; $ArrayBase - 1 or 0 - tells what base the array is
; $sTitle - the title to put on the output window
; $Width, $Height, $Left, $Top - Set the size and position of the output window
; Requirement(s): $Array must be 1d or 2d. If 1-based, then arraysize is assumed to be $Array[0] or $Array[0][0]
; Return Value(s): -1 = $Array is not an array, error=1
; Author(s): Mike Ratzlaff <mike@ratzlaff.org>
; Revision: 20050620A
;
;===============================================================================
;
Func _ArrayBox(ByRef $Array, $ArrayBase = 1, $sTitle = 'Array Box', $sTemp = '', $sIni = False, $Width = 400, $Height = 200, $Left = -1, $Top = -1)
Dim $AllDone = 0, $msg, $i, $j, $ArrayDimensions = UBound($Array, 0)
Dim $hndForm_Main, $hndListView_Display
If $ArrayDimensions = 0 Then
SetError(1)
Return -1
EndIf
;Setup
If $ArrayBase <> 0 Then $ArrayBase = 1
If $ArrayBase Then
Select
Case $ArrayDimensions = 1
$ArrayMax = $Array[0]
Case $ArrayDimensions = 2
$ArrayMax = $Array[0][0]
EndSelect
Else
$ArrayMax = UBound($Array, 1) - 1
EndIf
;Create GUI
If $Height < 100 Then $Height = 100
If $Width < 100 Then $Width = 100
$hndForm_Main = GUICreate($sTitle, $Width, $Height, $Left, $Top, BitOR($WS_POPUP, $WS_CAPTION, $WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_EX_DLGMODALFRAME))
;Create List Box
If $ArrayDimensions = 1 Then
If $sTemp = '' Then $sTemp = 'Index|Value'
ElseIf $ArrayDimensions = 2 Then
If $sTemp = '' Then
$sTemp = 'Index'
For $i = 0 To UBound($Array, 2) - 1
$sTemp = $sTemp & '|' & $i
Next
EndIf
EndIf
$hndListView_Display = GUICtrlCreateListView($sTemp, 0, 0, $Width, $Height - 24, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_NOSORTHEADER))
GUICtrlSetResizing($hndListView_Display, BitOR($GUI_DockLeft, $GUI_DockTop, $GUI_DockRight, $GUI_DockBottom))
_GUICtrlListView_SetColumnWidth($hndListView_Display, 0, 36)
;Create Controls, Show GUI
$hndButton_Close = GUICtrlCreateButton('&Close', $Width - 80, $Height - 24, 80, 24)
GUICtrlSetResizing($hndButton_Close, BitOR($GUI_DockRight, $GUI_DockBottom, $GUI_DockSize))
GUICtrlSetState($hndButton_Close, $GUI_DefButton)
If $sIni Then WinMove($sTitle, '', IniRead($inifile, 'Test', 'XPos', 20), IniRead($inifile, 'Test', 'YPos', 20), IniRead($inifile, 'Test', 'Width', 400), IniRead($inifile, 'Test', 'Height', 200))
GUISetState(@SW_SHOW, $hndForm_Main)
;Display Array
Select
Case $ArrayDimensions = 1 ;1-Dimensional Array
For $i = $ArrayBase To $ArrayMax
GUICtrlCreateListViewItem($i & '|' & $Array[$i], $hndListView_Display)
Next ;$i
Case $ArrayDimensions = 2 ;2-Dimensional Array
For $i = $ArrayBase To $ArrayMax
$sTemp = $Array[$i][0]
For $j = 1 To UBound($Array, 2) - 1
$sTemp = $sTemp & '|' & $Array[$i][$j]
Next ;$j
GUICtrlCreateListViewItem('[' & $i & ']|' & $sTemp, $hndListView_Display)
Next ;$i
Case Else ;Unhandled Type
EndSelect
_GUICtrlListView_SetColumnWidth($hndListView_Display, 1, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($hndListView_Display, 2, $LVSCW_AUTOSIZE)
;Wait for user to close box
Do
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
$AllDone = 1
Case $msg = $hndButton_Close
$AllDone = 1
EndSelect
Until $AllDone
Local $wPos = WinGetPos($sTitle)
If @error = 0 And $sIni Then
IniWrite($inifile, 'Test', 'XPos', $wPos[0])
IniWrite($inifile, 'Test', 'YPos', $wPos[1])
IniWrite($inifile, 'Test', 'Width', $wPos[2])
IniWrite($inifile, 'Test', 'Height', $wPos[3])
EndIf
GUIDelete($hndForm_Main)
Return 0
EndFunc ;==>_ArrayBox
; #FUNCTION# =====================================================================================================================
; _FileListToArrayPlus($sPath, $sInclude = "*", $iFlag = 0, $sExcludeFolder = "", $sExclude = "", $iPathType = 0, $bRecursive = False)
; Name...........: _FileListToArray_Rec
; Parameters ....: $sPath: Folder to search
; $sInclude: String to match on (wildcards allowed, multiples delimited by ;)
; $iFlag: Returned data type. 0 = Files and folders (default), 1 = Files only, 2 = Folders only
; $sExcludeFolder: List of folders to exclude from search (wildcards allowed, multiples delimited by ;)
; $sExclude: List of filenames to exclude from search (wildcards allowed, multiples delimited by ;)
; $iPathType: Returned data format. 0 = Filename only (default), 1 = Path relative to $sPath, 2 = Full path/filename
; $bRecursive: False = Search $sPath folder only (default), True = Search $sPath and all subfolders
; Author ........: Half the Autoit Community (Forum thread #96952)
;===================================================================================================================================
Func _FileListToArrayPlus($sPath, $sInclude = "", $iFlag = 0, $sExcludeFolder = "", $sExclude = "", $iPathType = 0, $bRecursive = False)
Local $sRet = "", $sReturnFormat = "", $interrupt = False
$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\" ; ensure single trailing slash
If Not FileExists($sPath) Then Return SetError(1, 1, "")
; Edit include files list
If $sInclude = "*" Then $sInclude = ""
If $sInclude Then
If StringRegExp($sInclude, "[\\/ :><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "") ; invalid characters test
$sInclude = StringRegExpReplace(StringRegExpReplace($sInclude, "(\s*;\s*)+", ";"), "\A;|;\z", "") ; Strip unwanted whitespace
$sInclude = StringRegExpReplace($sInclude, "[][$.+^{}()]", "\\$0"); Ignore special characters
$sInclude = StringReplace(StringReplace(StringReplace($sInclude, "?", "."), "*", ".*?"), ";", "$|") ; Convert ? to ., * to .*?, and ; to |
$sInclude = "(?i)\A(" & $sInclude & "$)"; case-insensitive, match from first char, terminate strings
EndIf
; Edit exclude folders list
If $sExcludeFolder Then
$sExcludeFolder = StringRegExpReplace(StringRegExpReplace($sExcludeFolder, "(\s*;\s*)+", ";"), "\A;|;\z", "") ; Strip unwanted whitespace
$sExcludeFolder = StringRegExpReplace($sExcludeFolder, "[][$.+^{}()]", "\\$0"); Ignore special characters
$sExcludeFolder = StringReplace(StringReplace(StringReplace($sExcludeFolder, "?", "."), "*", ".*?"), ";", "$|") ; Convert ?=. *=.*? ;=|
$sExcludeFolder = "(?i)\A(?!" & $sExcludeFolder & "$)"; case-insensitive, match from first char, terminate strings
EndIf
; Edit exclude files list
If $sExclude Then
$sExclude = StringRegExpReplace(StringRegExpReplace($sExclude, "(\s*;\s*)+", ";"), "\A;|;\z", "") ; Strip unwanted whitespace
$sExclude = StringRegExpReplace($sExclude, "[][$.+^{}()]", "\\$0"); Ignore special characters
$sExclude = StringReplace(StringReplace(StringReplace($sExclude, "?", "."), "*", ".*?"), ";", "$|") ; Convert ?=. *=.*? ;=|
$sExclude = "(?i)\A(?!" & $sExclude & "$)"; case-insensitive, match from first char, terminate strings
EndIf
; MsgBox(1,"Masks","File include: " & $sInclude & @CRLF & "File exclude: " & $sExclude & @CRLF & "Dir exclude : " & $sExcludeFolder)
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
Local $sOrigPathLen = StringLen($sPath), $aQueue[64] = [1, $sPath], $iQMax = 63
While $aQueue[0]
$WorkFolder = $aQueue[$aQueue[0]]
$aQueue[0] -= 1
$search = FileFindFirstFile($WorkFolder & "*")
If @error Then ContinueLoop
Switch $iPathType
Case 1 ; relative path
$sReturnFormat = StringTrimLeft($WorkFolder, $sOrigPathLen)
Case 2 ; full path
$sReturnFormat = $WorkFolder
EndSwitch
While 1
$nMsg2 = GUIGetMsg()
Switch $nMsg2
Case $Go
$interrupt = True
ExitLoop
Case Else
$file = FileFindNextFile($search)
If @error Then ExitLoop
If @extended Then ; Folder
If $sExcludeFolder And Not StringRegExp($file, $sExcludeFolder) Then ContinueLoop
If $bRecursive Then
If $aQueue[0] = $iQMax Then
$iQMax += 128
ReDim $aQueue[$iQMax + 1]
EndIf
$aQueue[0] += 1
$aQueue[$aQueue[0]] = $WorkFolder & $file & "\"
EndIf
If $iFlag = 1 Then ContinueLoop
$sRet &= $sReturnFormat & $file & "|"
Else ; File
If $iFlag = 2 Then ContinueLoop
If $sInclude And Not StringRegExp($file, $sInclude) Then ContinueLoop
If $sExclude And Not StringRegExp($file, $sExclude) Then ContinueLoop
$sRet &= $sReturnFormat & $file & "|"
EndIf
EndSwitch
WEnd
FileClose($search)
If $interrupt Then ExitLoop
WEnd
If Not $sRet Then Return SetError(4, 4, "")
Return StringSplit(StringTrimRight($sRet, 1), "|")
EndFunc ;==>_FileListToArrayPlus