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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файлов кроме сегодняшнего

Ответить
Настройки темы
CMD/BAT - [решено] Удаление файлов кроме сегодняшнего

Аватара для Kenwood

Пользователь


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

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


Здравствуйте,

У меня возникла задачка: в папке имеются логи за несколько лет. Каждый день программа создает новый файл. Все бы ничего, если бы не возникла потребность удалять файлы по причине отсутсвия места на диске. Можно конечно было вручную снести все файлы, но хочется автоматизировать данный процесс. Так вот, как сделать так, чтобы в одной конкретной папке удалялись файлы старше 1-х суток. Программа каждые сутки создает файл типа: ftp20130301.log, вчера ftp20130228.log и так далее.....

Заранее спасибо

Отправлено: 15:34, 01-03-2013

 

Ветеран


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

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


Kenwood, ориентируемся на дату/время последней модификации самого файла или же на дату в его имени?

Отправлено: 18:21, 01-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


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

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


ИМХО, имеет смысл хранить заданное кол-во логов, например, 2, а остальные удалять, и не задумываться о датах. Главное, чтобы логи бесконечно не накапливались, а батник в назначенном задании это периодически отслеживал. Так как программа каждые сутки создает файл типа: ftpГГГГММДД.log и если ориентируемся на дату/время последней модификации самого файла, то
Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 01-03-2013 в 23:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:07, 01-03-2013 | #3


Аватара для Kenwood

Пользователь


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

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


Надо ориентироваться только на дату в его имени

Отправлено: 23:20, 01-03-2013 | #4


Ветеран


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

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


Kenwood, тогда можно так:
Код: Выделить весь код
@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) затронуты не будут.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:07, 02-03-2013 | #5


Аватара для Kenwood

Пользователь


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

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


спасибо ограмное, все сработало!!! Так как надо было.
Спасибо всем за помощь, особенно Iska

Отправлено: 15:26, 04-03-2013 | #6


Аватара для Freddy1984

Старожил


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

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


Цитата 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" ?

Отправлено: 10:36, 06-02-2016 | #7


Ветеран


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

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


Цитата Freddy1984:
что в данном контексте означает: "2^>nul" ? »
Оно в любом контексте перенаправляет STDERR в NULL (т.е. подавляет вывод ошибок)
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:44, 06-02-2016 | #8


Аватара для Freddy1984

Старожил


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

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


Цитата Foreigner:
Оно в любом контексте перенаправляет STDERR в NULL (т.е. подавляет вывод ошибок) »
а цифра "2" означает что будет подавлен вывод двух ошибок?

Отправлено: 14:26, 06-02-2016 | #9


Ветеран


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

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


Цитата Freddy1984:
а цифра "2" означает что будет подавлен вывод двух ошибок? »
Нет. «2» означает стандартный поток ошибок (stderr).

Стандартные потоки — Википедия
Перенаправление ввода-вывода — Википедия
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:55, 06-02-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файлов кроме сегодняшнего

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление всех файлов из папки кроме батника composter Скриптовые языки администрирования Windows 11 30-03-2013 08:25
CMD/BAT - Удаление всех файлов кроме одного в подпапках SELFY Скриптовые языки администрирования Windows 2 29-07-2012 15:34
Любой язык - удаление всех символов кроме шаблона gendalf Скриптовые языки администрирования Windows 3 19-07-2012 16:21
Любой язык - Удаление файлов старше 5 дней кроме указанного по имени. Joni Скриптовые языки администрирования Windows 6 11-07-2012 11:18
MSFT SQL Server - [решено] Удаление баз кроме ... Butunin Klim Программирование и базы данных 5 23-04-2009 10:01




 
Переход