Цитата sawe:
Не могу разобраться с логикой.
В случае повторной установки (поверх), нужно что бы один файл не переписывался заново и тем более не удалялся, а сохранялся под новым именем. »
|
Все достаточно просто, создайте рядом со скриптом
Текстовый документ.txt и каждый следующий запуск будет прибавлять единицу к имени файла и так до 1000 - потом "обнулится" до единицы - этого вполне достаточно.
Код:

OutFile "setup.exe"
!include "logiclib.nsh"
ShowInstDetails show
Section
#******************************************************************************************
StrLen $2 "Текстовый документ_old_" ;получаем число символов для поиска по маске
StrLen $6 "Текстовый документ_old_1.txt" ;получаем число символов до old_9
StrLen $7 "Текстовый документ_old_100.txt" ;получаем число символов до old_1000
#******************************************************************************************
${If} ${FileExists} "$EXEDIR\Текстовый документ.txt"
Rename "$EXEDIR\Текстовый документ.txt" "$EXEDIR\Текстовый документ_old.txt"
${ElseIf} ${FileExists} "$EXEDIR\Текстовый документ_old.txt"
Rename "$EXEDIR\Текстовый документ_old.txt" "$EXEDIR\Текстовый документ_old_1.txt"
${Else}
FindFirst $0 `$1` "$EXEDIR\*.txt" ;ищем все файлы с расширением txt
${DoUntil} `$1` == `` ;в переменную $1 получаем в цикле имена файлов
StrCpy `$3` `$1` $2 ;берем $2 символов с получаемых имен файлов и результат в $3
${If} `$3` == "Текстовый документ_old_" ;сравниваем результат по маске
StrLen $5 `$1` ;получаем число символов из файла
${IfThen} $5 <= $6 ${|}StrCpy $4 `$1` 1 -5${|} ;если $4 < old_9 берем 1 символ
${IfThen} $5 > $6 ${|}StrCpy $4 `$1` 2 -6${|} ;если $4 > old_9 берем 2 символа
${IfThen} $5 >= $7 ${|}StrCpy $4 `$1` 3 -7${|} ;если $4 > old_99 берем 3 символа
IntOp $4 $4 + 1
Rename "$EXEDIR\$1" "$EXEDIR\$3$4.txt"
DetailPrint "$3$4.txt"
${Break} ; выход из цикла
${EndIf}
FindNext $0 $1
${Loop}
FindClose $0
${EndIf}
SectionEnd