|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Удаление файла по дате в Имени |
|
|
Любой язык - Удаление файла по дате в Имени
|
Новый участник Сообщения: 3 |
Привет
Нужна помощь в создании скрипта, который удалял бы файлы, по дате а имени (формата название_yyyymmdd.bd) Суть в том, что бы оставлять 3-5 самых свежих файла (по дате в названии) остальные удалять перепробовал совмещать различные варианты, но для примера в CMD\BAT не хочет считывать имя @echo off SetLocal EnableExtensions :: папка, с файлами вида yyyymmdd для удаления set "Folder=C:\temp\test"& set "rs=bd" pushd "%Folder%" For /F "delims=" %%a in ('forfiles /d -3 /m "*%DATE:-4%%DATE:~3,2%%DATE:~6,2%.bd"') do if not defined "%%a" echo del /f /q "%rs%%%a" exit /b главное, что бы работало спасибо |
|
Отправлено: 23:19, 14-08-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата kasab:
@echo off setlocal enableextensions enabledelayedexpansion set sSourceFolder=C:\Мои проекты\0271\Source for /f "usebackq skip=5 delims=" %%i in ( `2^>nul dir /b /a:-d /o:-n "%sSourceFolder%\название_*.bd"` ) do echo del /f /q "%sSourceFolder%\%%~i" endlocal exit /b 0 |
|
Отправлено: 00:06, 15-08-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 2798
|
Профиль | Отправить PM | Цитировать А зачем ориентироваться на дату записанную в названии если у каждого файла и так есть аттрибуты времени? Тот же CreationTime
На Powershell будет выглядеть как-то так: $path = "C:\test\*" $allfiles = Get-ChildItem -Path $path -Force -File -Include *.bd | select * | Sort-Object -Descending CreationTime $allfiles[5..($allfiles.Count - 1)] | Remove-Item -WhatIf 1. Путь должен заканчиваться на \* чтобы корректно отрабатывал фильтр -Include *.bd (это ведь расширение файла, да? Если нет то подставь своё расширение), чтобы в свою очередь работать только с нужными файлами и пропускать скрытые системные файлы, если вдруг они есть. 2. -WhatIf в конце позволяет безболезненно посмотреть что сделает код - увидишь какие файлы будут удалены этим кодом без их фактического удаления. 3. Возможно понадобиться -Force там же, в конце. Зависит от наличия прав. 4. Если когда-нибудь придется изменить количество оставляемых файлов - $allfiles[5..($allfiles.Count - 1)] фильтрует элементы с пятого по последний. Т.к. нумерация элементов в массиве начинается с 0 - приходится отнимать 1 от количества элементов чтобы получить номер последнего ($allfiles.Count - 1), в данном случае для 10 файлов - последний номер 9. Соответственно фильтр $allfiles[5..9] удаляет элементы с пятого по девятый, оставляя элементы с 0го по 4ый (итого 5) |
Отправлено: 00:41, 15-08-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Charg:
|
|
Отправлено: 03:32, 15-08-2019 | #4 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Charg:
|
|||
Отправлено: 05:44, 15-08-2019 | #5 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать kasab, я когда-то колхозил с прямо противоположной стороны: в имени бэкапа использовал не дату, а день недели - сама собой получалась авторотация с периодом в неделю. Хотя, конечно, негибко - лёгким движением руки переопределить период не получится (но так ли часто меняются такие настройки).
Цитата kasab:
|
|
Отправлено: 11:54, 15-08-2019 | #6 |
![]() Ветеран Сообщения: 2798
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата kasab:
|
||
Отправлено: 12:09, 15-08-2019 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Charg, дату/время в имена файлов, особенно резервных копий, добавляют совсем не случайно. Ибо упомянутые Вами атрибуты файла внезапно — смертны.
|
Отправлено: 12:37, 15-08-2019 | #8 |
![]() Ветеран Сообщения: 2798
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 12:41, 15-08-2019 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Iska, А зачем двойной цикл? Можно так:
@Echo Off
Set "BoxArc=Z:\Box_ARC"
Set "Mask=Название бэкапа базы_20??????.bd"
Set /A NSave=5
FOR /F "usebackq skip=%Nsave% delims=" %%f IN (`2^>nul Dir "%BoxArc%\%Mask%" /B /A:-D /O:-N`) DO Echo Del "%BoxArc%\%%f"
Exit /B
@Echo Off
Call :DelData "Z:\Box_ARC\Название бэкапа базы_20??????.bd" 5
Exit /B
:DelData
FOR /F "usebackq skip=%2 delims=" %%f IN (`2^>nul Dir %1 /B /A:-D /O:-N`) DO Echo Del "%~dp1%%f"
Exit /B
Цитата Iska:
|
|
------- Последний раз редактировалось megaloman, 15-08-2019 в 12:57. Отправлено: 12:43, 15-08-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Раскидать файлы по папкам согласно дате в имени файла | spkvvs | Скриптовые языки администрирования Windows | 17 | 24-01-2024 16:03 | |
VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n | Vooodi4356 | Скриптовые языки администрирования Windows | 5 | 25-03-2018 14:02 | |
CMD/BAT - [решено] Удаление старых файлов по дате и имени, если их больше n | NinjaScript | Скриптовые языки администрирования Windows | 2 | 04-03-2015 14:27 | |
CMD/BAT - Удаление файлов по дате | interminable | Скриптовые языки администрирования Windows | 1 | 07-06-2012 15:48 | |
CMD/BAT - Удаление файлов по дате | ADGJMPTW | Скриптовые языки администрирования Windows | 1 | 10-10-2010 20:08 |
|