Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата 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

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Последний раз редактировалось kotkovets, 05-07-2011 в 01:16.


Отправлено: 01:10, 05-07-2011 | #1288