CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
-
Kenwood
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Здравствуйте,
У меня возникла задачка: в папке имеются логи за несколько лет. Каждый день программа создает новый файл. Все бы ничего, если бы не возникла потребность удалять файлы по причине отсутсвия места на диске. Можно конечно было вручную снести все файлы, но хочется автоматизировать данный процесс. Так вот, как сделать так, чтобы в одной конкретной папке удалялись файлы старше 1-х суток. Программа каждые сутки создает файл типа: ftp20130301.log, вчера ftp20130228.log и так далее.....
Заранее спасибо
У меня возникла задачка: в папке имеются логи за несколько лет. Каждый день программа создает новый файл. Все бы ничего, если бы не возникла потребность удалять файлы по причине отсутсвия места на диске. Можно конечно было вручную снести все файлы, но хочется автоматизировать данный процесс. Так вот, как сделать так, чтобы в одной конкретной папке удалялись файлы старше 1-х суток. Программа каждые сутки создает файл типа: ftp20130301.log, вчера ftp20130228.log и так далее.....
Заранее спасибо
-
Iska
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Kenwood, ориентируемся на дату/время последней модификации самого файла или же на дату в его имени?
-
mariolast
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Подниму тему.
А если файл вида 2021-05-10-07-42_11.02.038_03565688.ZBF ?
Как тут можно отфильтровать в названии дату?
А если файл вида 2021-05-10-07-42_11.02.038_03565688.ZBF ?
Как тут можно отфильтровать в названии дату?
-
Iska
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
ИМХО, имеет смысл хранить заданное кол-во логов, например, 2, а остальные удалять, и не задумываться о датах. Главное, чтобы логи бесконечно не накапливались, а батник в назначенном задании это периодически отслеживал. Так как программа каждые сутки создает файл типа: ftpГГГГММДД.log и если ориентируемся на дату/время последней модификации самого файла, то
Код:
Если ориентируемся на имена (в идеале, если злодейскими ручками никто логи не правит, результат будет один) For будет иметь вид
Код:
Если батник в папке с логами, то
Код:
Чуть не забыл, чтобы батник реально удалял файлы, уберите слово Echo (я его вставил для отладки) в For перед командой Del
По идее, можно совсем обойтись без батника, используя CMD и For в назначенном задании, например:
Код:
Код:
Код: Выделить всё
@Echo Off
Set Where=D:\Tmp
FOR /F "usebackq skip=2 delims=" %%f IN (`DIR "%Where%\ftp*.log" /B /A:-D /O:-D /T:W 2^>nul`) DO Echo Del "%Where%\%%f"Если ориентируемся на имена (в идеале, если злодейскими ручками никто логи не правит, результат будет один) For будет иметь вид
Код:
Код: Выделить всё
FOR /F "usebackq skip=2 delims=" %%f IN (`DIR "%Where%\ftp*.log" /B /A:-D /O:-N 2^>nul`) DO Echo Del "%Where%\%%f"Если батник в папке с логами, то
Код:
Код: Выделить всё
@Echo Off
FOR /F "usebackq skip=2 delims=" %%f IN (`DIR "ftp*.log" /B /A:-D /O:-D /T:W 2^>nul`) DO Echo Del "%%f"
или соответственно
FOR /F "usebackq skip=2 delims=" %%f IN (`DIR "ftp*.log" /B /A:-D /O:-N 2^>nul`) DO Echo Del "%%f"Чуть не забыл, чтобы батник реально удалял файлы, уберите слово Echo (я его вставил для отладки) в For перед командой Del
По идее, можно совсем обойтись без батника, используя CMD и For в назначенном задании, например:
Код:
Код: Выделить всё
cmd /Q /C FOR /F "usebackq skip=2 delims=" %f IN (`DIR "D:\Tmp\ftp*.log" /B /A:-D /O:-N`) DO Del "D:\Tmp\%f" >nul-
Kenwood
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Надо ориентироваться только на дату в его имени
-
Kenwood
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Kenwood, тогда можно так:
Код:
В папке скрипта будут удалены все файлы *.log, за исключением попадающих под маску ftpYYYYMMDD.log текущего дня. Прочие файлы (не *.log) затронуты не будут.
Код:
Код: Выделить всё
@echo off
setlocal enableextensions enabledelayedexpansion
set sDrive=%~d0
set sPath=%~p0
for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i
1>nul wmic.exe DataFile where "Drive='%sDrive%' AND Path='%sPath:\=\\%' AND FileName'ftp%sDateTime:~0,8%' AND Extension ='log'" call Delete
endlocal
exit /b 0В папке скрипта будут удалены все файлы *.log, за исключением попадающих под маску ftpYYYYMMDD.log текущего дня. Прочие файлы (не *.log) затронуты не будут.
-
Kenwood
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Цитата megaloman:
@Echo Off
Set Where=D:\Tmp
FOR /F "usebackq skip=2 delims=" %%f IN (`DIR "%Where%\ftp*.log" /B /A:-D /O:-D /T:W 2^>nul`) DO Echo Del "%Where%\%%f"
Можно попросить объяснить кто знает, что в данном контексте означает: "2^>nul" ?
@Echo Off
Set Where=D:\Tmp
FOR /F "usebackq skip=2 delims=" %%f IN (`DIR "%Where%\ftp*.log" /B /A:-D /O:-D /T:W 2^>nul`) DO Echo Del "%Where%\%%f"
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Можно попросить объяснить кто знает, что в данном контексте означает: "2^>nul" ?
-
Kenwood
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Цитата Freddy1984:
что в данном контексте означает: "2^>nul" ?
Оно в любом контексте перенаправляет STDERR в NULL (т.е. подавляет вывод ошибок)
что в данном контексте означает: "2^>nul" ?
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Оно в любом контексте перенаправляет STDERR в NULL (т.е. подавляет вывод ошибок)
-
Foreigner
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Цитата Foreigner:
Оно в любом контексте перенаправляет STDERR в NULL (т.е. подавляет вывод ошибок)
а цифра "2" означает что будет подавлен вывод двух ошибок?
Оно в любом контексте перенаправляет STDERR в NULL (т.е. подавляет вывод ошибок)
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
а цифра "2" означает что будет подавлен вывод двух ошибок?
-
Freddy1984
Re: CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Цитата Freddy1984:
а цифра "2" означает что будет подавлен вывод двух ошибок?
Нет. «2» означает стандартный поток ошибок (stderr).
а цифра "2" означает что будет подавлен вывод двух ошибок?
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего
Нет. «2» означает стандартный поток ошибок (stderr).
Стандартные потоки — Википедия
Перенаправление ввода-вывода — Википедия