Creat0R
вариант рабочей функции переименования (без контроля входных параматров!) - номера ранее переименованных файлов не трогаются, новые номера считаются от максимального существующего (поэтому возможны "дыры" в нумерации). По ходу производится приведение всех номеров к единому формату по количеству знаков в номере.
Код:

#include <File.au3>
#include <Array.au3>
#Include <String.au3>
_FilesFormatRename ("c:\Test", "_")
Func _FilesFormatRename ($sPath, $delim = "_")
Local $i, $iMaxNum
;Считываем список файлов в массив
Local $FileList = _FileListToArray($sPath, "*", 1)
;Создаем рабочий массив:
Local $WorkList [$FileList[0]+1] [6]
;[][0] - имя файла без расширения
;[][1] - имя файла без расширения и номера
;[][2] - только расширение
;[][3] - старый номер
;[][4] - новый номер
;[][5] - индекс для сортировки
;Заполняем рабочий массив
For $i=1 To $FileList[0]
;выделяем имя, расширение и номер
$WorkList [$i][0] = StringRegExpReplace ($FileList[$i], "\.[^.]*$","")
$WorkList [$i][1] = StringRegExpReplace ($WorkList [$i][0], $delim & '[0-9]*$',"")
$WorkList [$i][2] = StringMid ($FileList[$i], StringLen ($WorkList [$i][0]) +2)
$WorkList [$i][3] = StringMid ($WorkList [$i][0], StringLen ($WorkList [$i][1]) +2) +0
;формируем индекс для сортировки
$WorkList [$i][5] = $WorkList[$i][1] & "." & $WorkList[$i][2] & "." & StringFormat ("%." & StringLen($FileList[0]) & "d", $WorkList[$i][3])
Next
;Сортируем массив по убыванию старого номера
_ArraySort ($WorkList, 1, 1, $FileList[0]+1, 6, 5)
;Основной цикл перенумерации
For $i=1 To $FileList [0]
;проверка на совпадение имени
If $WorkList[$i-1][1] & "." & $WorkList[$i-1][2] = $WorkList[$i][1] & "." & $WorkList[$i][2] Then
;проверка на совпадение номера
If $WorkList [$i][3] = $WorkList [$i-1][3] Then
;если номера совпадают, добавляем в конец списка
$iMaxNum = $iMaxNum +1
$WorkList [$i][4] = $iMaxNum
Else
;если номера отличаются зачем менять?
$WorkList [$i][4] = $WorkList [$i][3]
EndIf
Else
;максимальный номер для нового имени
$iMaxNum=$WorkList [$i][3]
$WorkList [$i][4] = $iMaxNum
EndIf
;формируем индекс для сортировки
$WorkList [$i][5] = $WorkList[$i][1] & "." & $WorkList[$i][2] & "." & StringFormat ("%." & StringLen($FileList[0]) & "d", $WorkList[$i][4])
Next
;Сортируем массив по убыванию нового номера
_ArraySort ($WorkList, 1, 1, $FileList[0]+1, 6, 5)
;Подготовка к переименованию
FileChangeDir ($sPath)
FileSetAttrib("*", "-R")
;Собственно цикл переименования
For $i=1 To $FileList [0]
;проверка на совпадение имени
If ($WorkList[$i-1][1] & "." & $WorkList[$i-1][2]) <> ($WorkList[$i][1] & "." & $WorkList[$i][2]) Then $iMaxNum = $WorkList [$i][4]
FileMove ($WorkList [$i][0] & "." & $WorkList [$i][2], _
$WorkList [$i][1] & $delim & StringFormat ("%." & StringLen ($iMaxNum) & "d", $WorkList [$i][4]) & "." & $WorkList [$i][2])
Next
EndFunc