PDA

Показать полную графическую версию : [решено] CMD/BAT - удалить файлы старше 5ти минут батником (+папки)


ivanivan48
18-08-2017, 12:15
/del

Busla
18-08-2017, 13:04
А чего бы целиком на wsh не реализовать эту логику, раз он всё равно используется?

alpap
18-08-2017, 13:18
@echo off
set mt=%time%
set dt=-5
for /f "tokens=1-2 delims=:" %%a in ("%mt: =0%") do set/a "t=(1%%a-100)*60+(1%%b-100)+(dt %% 1440)","t+=(t>>31)&1440","hh=(t/60 %% 24)+100","mm=(t %% 60)+100"
echo Ищем файлы и^ (или^) папки с временем создания равным %hh:~-2%:%mm:~-2%
pause

P.S.
И для надежности отбираем файлы/папки созданные за сегодня и среди них и ищем

ivanivan48
18-08-2017, 14:29
/del

alpap
18-08-2017, 15:29
Может вы не совсем поняли »
может.
Но в заголовке удалить файлы старше 5ти минут »
конечно, опираясь на логику это для созданных сегодня файлов и чтобы созданные не сегодня не попадали в список поиска, то надо выделить только сегодняшние.
И если я не совсем понял что надо, то вероятно я не один, а отсюда следует что условие надо разжевать получше, хотя дело ваше, конечно.

ivanivan48
18-08-2017, 16:27
/del

alpap
18-08-2017, 18:35
сегодня не сегодня - не имеет значения. »
еще как имеет.
попробуйте просто не обращать внимания на формулы и не задумываться как получается время, а просто представить что мы хотим увидеть разницу исключительно во времени двух файлов. Так вот она может отличаться на 5 минут как на двух файлах созданных сегодня и точно так же на одном за сегодня, а на другом в прошлом месяце - нет?
например такой код найдет в папке файлы и папки созданные именно сегодня и если время их создания будет менее 5ти минут текущего, то попросит удалить:

@echo off
set "d=papka"
for /f "skip=2 tokens=2,3*" %%a in ('dir /a/tc/-c "%d%"^|find "%date%"') do call :# "%%a" "%time%" "%%c"
pause& exit

:#
set "t1=%~1"& set "t2=%~2"
for /f "tokens=1-4 delims=:" %%a in ("%t1: =0%:%t2: =0%") do set/a "st1=(24-1%%a%%100)%%24*60-1%%b%%100","st2=(24-1%%c%%100)%%24*60-1%%d%%100","st=st1-st2"
if %st% gtr 5 echo "%d%\%~3" надо удалить
exit /b

y--
18-08-2017, 21:47
alpap, Так вот она может отличаться на 5 минут как на двух файлах созданных сегодня и точно так же на одном за сегодня, а на другом в прошлом месяце - нет? »конечно нет.
Без формул - осмысляем:сколько минут прошло с момента создания файла »это разве похоже на разницу времени(в смысле часы-минуты минус часы минуты)? Ни разу... Так как суточный файл будет иметь время жизни в минутах 1440 и больше - дата заведомо здесь уже не нужна.
Конечно на ОЧЕНЬ старых файлах рискуем не влезть в счетчик - но это уже другая история...

alpap
19-08-2017, 14:31
y--,
может мы о чем-то разном, но хочется все же дойти до общего знаменателя.
Например:

@echo off
set "d=papka"
:: файл:a.txt создан:19.08.2017 время:13:50
:: файл:b.txt создан:19.07.2017 время:13:50
:: файл:c.txt создан:19.08.2016 время:13:50
:: файл:d.txt создан:18.08.2016 время:13:50
:: Текущее время 19.08.2017 14:15:45 (т.е. сегодня и все файлы более 5ти минут, но есть не сегодняшние)
for /f "skip=2 tokens=2,3*" %%a in ('dir /a/tc/-c "%d%"^|findstr/rc:"^[^ ]"') do call :# "%%a" "%time%" "%%c"
pause& exit

:#
set "t1=%~1"& set "t2=%~2"
for /f "tokens=1-4 delims=:" %%a in ("%t1: =0%:%t2: =0%") do set/a "st1=(24-1%%a%%100)%%24*60-1%%b%%100","st2=(24-1%%c%%100)%%24*60-1%%d%%100","st=st1-st2"
if %st% gtr 5 echo "%d%\%~3" надо удалить
:: Все попадают под удаление, естественно
exit /b


если
:: файл:a.txt создан:19.08.2017 время:14:15
:: файл:b.txt создан:19.07.2017 время:14:15
:: файл:c.txt создан:19.08.2016 время:14:15
:: файл:d.txt создан:18.08.2016 время:13:50
Под удаление попадает только "d.txt"

По моей логике - естественно в пределах времени, неестественно в пределах даты
По логике "Независимо от даты лишь бы более 5ти минут" естественно, но уже нелогично. Или такого файла просто не может (не должно) уже там быть или надо отсекать подобное.

Пример
Работает врач (фотограф или еще кто) делает снимки 5ти минутные и сразу удаляет. Он не должен натолкнуться на что-либо прошлого года или месяца (случайно скопировал в сегодняшнюю папку что-то из архивов для сравнения и забыл убрать)

Busla
19-08-2017, 15:24
alpap,
Вот именно: он 30 декабря выключил компьютер и ушёл на каникулы. 10 января, когда он включит компьютер и приступит к работе, скрипт должен доудалить временные файлы оставшиеся с прошлого сеанса работы. А было это в другой день, другой месяц, другой год.

Да и вообще, скрипт более-менее универсален - удаление легко меняется на какую-либо более созидательную деятельность, а пять минут - на двое суток.

alpap
19-08-2017, 18:14
легко меняется »
на том и порешим.




© OSzone.net 2001-2012