romgun, я же говорил в цикле читаем файл,в функции макроса значения совпадений уничтожается, поэтому для подсчёта объявляем свою переменную:
Код:

Var int
Пример файла:
Код:

[setup]
Name=app.exe
[dir]
Dirpatch_1=C:\
Dirpatch_2=D:\
Dirpatch_3=E:\
Пример:
Код:

Section
StrCpy $int 0
${FileReadFromEnd} "$InstDir\file.cfg" "Read"
${if} ${Errors}
MessageBox mb_ok "файл не найден"
${Else}
${For} $0 1 $int
ReadIniStr $1 "$InstDir\file.cfg" "dir" "Dirpatch_$0"
MessageBox mb_ok "$1"
${Next}
${EndIf}
SectionEnd
Function Read
StrCpy $R0 $9 9
${If} $R0 == "Dirpatch_"
InTop $int $int + 1
MessageBox mb_ok "$R0 - $int"
${EndIf}
Push $0
FunctionEnd