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

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

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


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

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


Код: Выделить весь код
Function RenameFiles  
Var /global n 
StrCpy $n 1  
Delete "$TEMP\tmpfile.ini"

ClearErrors
FindFirst $0 $1 $DESKTOP\D\*.*
loop:
StrCmp $1 "" done
StrCmp $1 "." next
StrCmp $1 ".." next

ReadINIStr $2 "$TEMP\tmpfile.ini" "tmp" "$1"
StrCmp $2 "1" next 0 

Rename "$DESKTOP\D\$1" "$DESKTOP\D\$n"
WriteINIStr "$TEMP\tmpfile.ini" "tmp" "$n" "1"
IntOp $n $n + 1   

next:
FindNext $0 $1
Goto loop
done:
FindClose $0
Delete "$TEMP\tmpfile.ini"
FunctionEnd
Цитата MKN:
Но почему то получается хаотичное переименование, особенно если много файлов... »
Ты упустил 1 очень важный момент: после переименования файл считается "новым", т.е. ещё не перечисленным, отсюда такой результат, переименованные файлы вновь перечисляются и получается каша в именах, поэтому код отрабатывает не так, как нам бы хотелось
Соответственно, чтобы сделать этот процесс правильным - нам нужно запоминать, какой файл уже был переименован (чтобы повторно его не обрабатывать), для этого сбрасываем имена переименованных файлов во временный файл и перед каждой командой переименования проверяем наличие записи о текущем файле
Ещё один момент, когда перечисляешь все файлы в папке командой Find*, в переменную имени файла сбрасывается значение "." и "..", из-за чего счетчик так же может быть не правильным, проверку на эти значения я так же прописал
Ну и ещё один момент - счетчик нужно менять только после операции переименования, а не после/перед командой FindNext, т.к. опять же, счетчик будет не правильным

Цитата MKN:
Также интересует выборочное переименование , типа, переимен. начиная с такого то по такой то файл и др сочетания... »
Типа будет конкретика - будет и код, нет желания потом опять переписывать код по причине недопонимания/недостаточности подробностей

p.s.
я бы вообще, сделал всё это дело через функцию Locate (красивее/удобнее), но т.к. она багованная с самого 2.46 и при указании некоторых команд (например ReadINIStr) в callback функцию, она просто завершается - из-за этого этот вариант отпадает

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:31, 31-03-2015 | #1549