Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] CMD/BAT - удалить файлы старше 5ти минут батником (+папки) (http://forum.oszone.net/showthread.php?t=329176)

ivanivan48 18-08-2017 12:15 2759220

CMD/BAT - удалить файлы старше 5ти минут батником (+папки)
 
/del

Busla 18-08-2017 13:04 2759226

А чего бы целиком на wsh не реализовать эту логику, раз он всё равно используется?

alpap 18-08-2017 13:18 2759233

Код:

@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 2759250

/del

alpap 18-08-2017 15:29 2759262

Цитата:

Цитата ivanivan48
Может вы не совсем поняли »

может.
Но в заголовке
Цитата:

Цитата ivanivan48
удалить файлы старше 5ти минут »

конечно, опираясь на логику это для созданных сегодня файлов и чтобы созданные не сегодня не попадали в список поиска, то надо выделить только сегодняшние.
И если я не совсем понял что надо, то вероятно я не один, а отсюда следует что условие надо разжевать получше, хотя дело ваше, конечно.

ivanivan48 18-08-2017 16:27 2759270

/del

alpap 18-08-2017 18:35 2759291

Цитата:

Цитата ivanivan48
сегодня не сегодня - не имеет значения. »

еще как имеет.
попробуйте просто не обращать внимания на формулы и не задумываться как получается время, а просто представить что мы хотим увидеть разницу исключительно во времени двух файлов. Так вот она может отличаться на 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 2759328

alpap,
Цитата:

Цитата alpap
Так вот она может отличаться на 5 минут как на двух файлах созданных сегодня и точно так же на одном за сегодня, а на другом в прошлом месяце - нет? »

конечно нет.
Без формул - осмысляем:
Цитата:

Цитата ivanivan48
сколько минут прошло с момента создания файла »

это разве похоже на разницу времени(в смысле часы-минуты минус часы минуты)? Ни разу... Так как суточный файл будет иметь время жизни в минутах 1440 и больше - дата заведомо здесь уже не нужна.
Конечно на ОЧЕНЬ старых файлах рискуем не влезть в счетчик - но это уже другая история...

alpap 19-08-2017 14:31 2759402

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 2759413

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

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

alpap 19-08-2017 18:14 2759434

Цитата:

Цитата Busla
легко меняется »

на том и порешим.


Время: 09:34.

Время: 09:34.
© OSzone.net 2001-