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

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

Аватара для El Sanchez

Ветеран


Contributor


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

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


Banzaika,

Цитата El Sanchez:
Echo.>_UniqueNames.log »
Пишем пустую строку в файл _UniqueNames.log, где будет список уникальных имен.

Цитата El Sanchez:
For /F "Tokens=1* Delims=-" %%A In ('Dir /B "%Source%\*.zip"') Do (
Find "%%B" _UniqueNames.log 1>nul 2>&1||Echo %%B>>_UniqueNames.log&&Call :Func "!Count!"
) »
Основной цикл. Из вывода команды Dir берем из каждой строки все, что после дефиса, т.е. уникальное имя (переменная %B). Ищем имя в файле _UniqueNames.log (Find "%%B" _UniqueNames.log 1>nul 2>&1) и, если в файле его еще нет (||), то записываем его (Echo %%B>>_UniqueNames.log). Если запись произведена (&&), то вызываем процедуру Func с передаваемым в нее параметром Count - количество строк для пропуска.

Сама процедура:
Цитата El Sanchez:
:Func
For /F "Skip=%~1 Tokens=*" %%C In ('Type _UniqueNames.log') Do (
For /F "Skip=%NumSavedFiles% Tokens=*" %%D In ('Dir /B /O-D /TC "%Source%\*%%C"') Do Del /F /Q "%Source%\%%D" 1>nul 2>&1
)
Set /A Count+=1 »
, где For /F "Skip=%~1 Tokens=*" %%C In ('Type _UniqueNames.log') - печатаем наш лог-файл и пропускаем количество строк, заданное в ключевом слове Skip. %~1 - это
наше количество строк Count, переданное из основного цикла. Skip не может начинаться с нуля, по-этому в самом начале и записана пустая строка в _UniqueNames.log.
В попадет последняя строка, содержащая уникальное имя.

For /F "Skip=%NumSavedFiles% Tokens=*" %%D In ('Dir /B /O-D /TC "%Source%\*%%C"') Do Del /F /Q "%Source%\%%D" 1>nul 2>&1 - сортируем все файлы, содержащие в себе уникальное имя %C,
начиная с самого нового (/O-D /TC), пропускаем нужные 5 файлов (%NumSavedFiles%), а все остальное удаляем.

Set /A Count+=1 - увеличиваем количество строк, т.к. при следующем найденном уникальном имени нужно будет пропускать в _UniqueNames.log на строку больше.

Отправлено: 19:45, 24-07-2010 | #7