Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48

Необходимо оставить в папке самые старые файлы и два самых новых

16.02.2014, 15:53. Показов 2714. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с решением
Имеем папку с файлами архива.
В ней допустим есть 3 самых старых созданных файлов например за 10.02.14. И каждый день добавляется по одному файлу дополнения. Необходим батник чтобы периодически пробегал по всей папке и удалял промежуточные файлы. Оставляя при этом 3 самых старых и два новых за два дня.
Эти 3 никогда не трогаем
=============
file1 создан 10.02.14
file2 создан 10.02.14
file3 создан 10.02.14

=============
Эти надо удалить
file4 создан 11.02.14
file5 создан 12.02.14
file6 создан 13.02.14

====================
Эти надо оставить.
file7 создан 14.02.14
file8 создан 15.02.14

Файлы все одного расширения и создаются по одному в день.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2014, 15:53
Ответы с готовыми решениями:

Оставить в папке с файлами только самые большие по размеру, остальные - удалить
Здравствуйте! Есть проблема с сортировкой файлов в папке, а именно: имеется папка с файлами *.mp3 (~35 000 файлов). Некоторые из файлов...

Определить два самых теплых и два самых холодных дня в месяце
Требуется написать программу на Pascal ABC.NET С клавиатуры вводятся среднесуточные значения температуры за последний месяц. Определить...

Вывести список самых новых и самых старых машин для каждой из стоянок,с указанием их владельцев и года выпуска
"В районном обществе автолюбителей имеются сведения об N автомобилях.О каждой машине известно:фамилия владельца,год выпуска и номер...

4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.02.2014, 18:12
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set src=c:\papka
 
set c=0
For /F "Delims=" %%a in ('dir /TC /OD /B /A-D "%src%\*" 2^>NUL ^| more +3') do set /A c+=1& set "file.!c!=%%a"
if %c%==0 exit /B
set /A c-=2
 
For /L %%n in (1,1,%c%) do del /F /Q "%src%\!file.%%n!"
Не проверял.
1
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48
16.02.2014, 19:50  [ТС]
Спасибо за ответ.
Проверил на копии папки.
Имеем
file создан 10.02.14
file1 создан 10.02.14

file2 создан 10.02.14
file3 создан 10.02.14
file4 создан 11.02.14
file5 создан 12.02.14
file6 создан 13.02.14
file7 создан 14.02.14

красным выделил то что удалилось. Захватил два нужных архива, и нужный последний.
Такой вопрос, скрипт берет дату создания или дату изменения файла?
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
16.02.2014, 20:48
kbv025, попробуйте
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal enabledelayedexpansion
 
set tt=%date:~6,4%%date:~3,2%%date:~0,2%
:: дата минус два дня
set /a tt1=%tt%-2
 
:: сортируем файлы по дате от ранних к поздним, пропускаем первые три даты (три самых старых файла)
for /f "skip=3 delims=" %%a in ('dir /b /s /a-d /od "c:\1\CMDEXE_HELP\*"') do (
set dt=%%~ta
set dt1=!dt:~6,4!!dt:~3,2!!dt:~0,2!
if !dt1! LSS %tt1% echo del /q "%%a"
)
pause
exit /b
для реального удаления файлов убрать echo в 12 строке

Добавлено через 23 минуты
Выше код будет иметь ошибки при переходе даты (минус два дня) через ноль.
Так будет правильно
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
setlocal enabledelayedexpansion
 
:: считаем по календарю два дня назад (чтобы не удалять двухдневные файлы)
set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%
 
if %d:~0,1%==0 set d=%d:~1%
if %m:~0,1%==0 set m=%m:~1%
 
set /a feb=y%%4
if %feb%==0 (set feb=29) else (set feb=28)
 
set /a tok=m-1
if %tok%==0 set tok=12
for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do (
   set /a d-=2
    if !d!==0 (
        set d=%%i
        set m=%tok%
        if !m!==12 set /a y-=1
    )
)
 
set d=0%d%
set m=0%m%
set tt=%d:~-2%.%m:~-2%.%y%
:: меняем представление даты
set tt1=%tt:~6,4%%tt:~3,2%%tt:~0,2%
 
:: сортируем файлы по дате от ранних к поздним, пропускаем первые три даты (файла)
for /f "skip=3 delims=" %%a in ('dir /b /s /a-d /od "c:\1\CMDEXE_HELP\*"') do (
set dt=%%~ta
set dt1=!dt:~6,4!!dt:~3,2!!dt:~0,2!
if !dt1! LSS %tt1% echo del /q "%%a"
)
pause
exit /b
1
1 / 1 / 2
Регистрация: 03.04.2013
Сообщений: 48
16.02.2014, 23:01  [ТС]
sov44
Спасибо.
Проверил, удаляет нужное. Единственное, что начальных файлов которые нельзя трогать может быть разное количество, которое время от времени меняется. (необходимо обрабатывать аналогично несколько папок).


А нельзя случаем просто брать дату из первого файла ее в переменную, потом в цикле пройтись по всей папке и по дате файлы не удаляемые перенести допустим временно в папку. А в оставшихся вычленить самый новый и предыдущий от него, остальные грохнуть и потом вернуть первые? Пытался сам состряпать по такому принципу но застрял на вычленении чистой даты без времени.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2014, 23:01
Помогаю со студенческими работами здесь

Проверять папку на новые файлы архивы zip и переименовывать их при появлении новых в папке
Есть папка(скажем D:\arhiv)Она изначально пуста. При нажатии на кнопку "Запуск" программа начинает проверять папку на появление новых...

Найти самые старые записи
Представтн ситуацыю. В таблице неь поля с датой. и поля id c AUTO INCREMENT тоже нет(один знакомый рукожоп строил) Возможно ли...

Найти два самых больших и самых маленьких элементов массива
Одномерные массивы для обычных массивов и для класса Array. Составить программу нахождения двух самых больших (самых маленьких) элементов...

Самые добрые мультфильмы для самых маленьких
Мне тут выдалась необходимость "посидеть с малышом". Ребенку 5 лет, девочка. Вот и думаю-вспоминаю, какие мультики в самый раз для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru