|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление старых файлов/папок если их кол-во больше n |
|
CMD/BAT - [решено] Удаление старых файлов/папок если их кол-во больше n
|
Новый участник Сообщения: 13 |
Профиль | Отправить PM | Цитировать Добрый день!
Помогите со скриптом, который будет сканировать нужную папку (например: C:\aaa), и если в нем файлов больше чем n (например 10), то удалить самый старый файл. И тоже самое нужно для папок. Очень надеюсь на вашу помощь. |
|
Отправлено: 14:32, 03-07-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата KaПaTы4:
|
|
Отправлено: 07:04, 10-04-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать KaПaTы4,
ну что непонятного? Берем код Iska из поста 4, подставляем параметры в значения переменных так: @echo off setlocal enableextensions enabledelayedexpansion set "sFolder=%~1" set /a "iCount=%~2" for /f "skip=%iCount% usebackq delims=" %%i in ( `dir /b /a:-d /o:-d /t:w "%sFolder%"` ) do echo del /f /q "%sFolder%\%%~i" endlocal exit /b 0 |
Отправлено: 14:50, 12-04-2019 | #12 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Доброе время суток !
Прошу помощи .... 3 дня копания на различных ресурсах не дали результат :-( По поводу удаления старых файлов: Есть файловая помойка на удаленном компе \\fs\obmen Если делать типа так @echo off SET Path2Del=\\fs\Obmen\ forfiles -p "%Path2Del%" -s -m *.* -d -10 -c "cmd /c del /q @path" for /f %%D in ('DIR cd "%Path2Del%" /AD/B ^| sort /r') do RD "%%D" всё отлично отрабатывается и файлы старше 10 дней уничтожаются. Но проблема в том, что в папки сотрудники кидают и файлы которым сто лет в обед, и соответственно скрипт видит, что они старые и на следующий день их кикает ( потому как они не ВНОВЬ созданные ) Внимание, вопрос к знатокам: Каким образом можно либо автоматически переделывать у данных файлов дату на момент появления в директориях ( я уже думал, может перед выполнением скрипта бэкапить новые "старые" файлы, удалять их, а потом заново заливать, но со свежей датой) , либо каким-то образом переделать скрипт. Пожалуйста помогите. Задача архиважная. Заранее СПАСИБО. |
Последний раз редактировалось POV, 10-01-2023 в 13:00. Отправлено: 12:51, 10-01-2023 | #13 |
Crazy Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата POV:
- поможет в выборе поля даты создания файлов, хотя у Вас для отбора и удаления файлов используется forfiles... Цитата POV:
|
||
------- Отправлено: 15:15, 10-01-2023 | #14 |
fascinating rhythm Сообщения: 6618
|
Профиль | Отправить PM | Цитировать POV, они вновь созданные. Просто forfiles смотрит не на дату создания, а на дату изменения.
Люди кладут файлы, и у файлов новая дата создания, но старая дата изменения. Возьмём пример: dir D:\temp\obmen |select name,creationtime,lastwritetime Name CreationTime LastWriteTime ---- ------------ ------------- new-new.txt 10.01.2023 15:56:30 10.01.2023 15:55:11 new-old.txt 10.01.2023 15:55:55 27.12.2022 15:55:11 old-new.txt 27.12.2022 15:55:11 10.01.2023 15:55:11 old-old.txt 27.12.2022 15:55:53 27.12.2022 15:55:53 # CMD forfiles -p "D:\temp\obmen" -s -m *.* -d -10 "new-old.txt" "old-old.txt" # Аналог на Powershell dir D:\temp\obmen |? lastwritetime -lt (get-date).Date.AddDays(-10) Каталог: D:\temp\obmen Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 27.12.2022 15:55 0 new-old.txt -a---- 27.12.2022 15:55 0 old-old.txt dir D:\temp\obmen |? creationtime -lt (get-date).Date.AddDays(-10) Каталог: D:\temp\obmen Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10.01.2023 15:55 0 old-new.txt -a---- 27.12.2022 15:55 0 old-old.txt |
------- Отправлено: 16:08, 10-01-2023 | #15 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Спасибо, дорогие, что откликнулись !
YuS_2, Цитата YuS_2:
, но там так-же работает, как и вариант с forfiles. Вот бы кто впихнул в этот .ps1 то, что нужно и куда нужно .... DJ Mogarych Благодарю, смысл уловил, но опять-же как пониманию на cmd этого в данном случае не реализовать, и опять-же powershell ... (читай выше) .... |
|
Отправлено: 05:14, 11-01-2023 | #16 |
Crazy Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата POV:
Для начала: https://learn.microsoft.com/ru-ru/po...powershell-7.3 ну и: https://andpop.ru/courses/winscript/...posh_popov.pdf а по-быстрому: 1. Проверить политику запуска скриптов (в первой ссылке есть описание, вот более конкретная ссылка). Если стоит запрет на выполнение скриптов, то измените политику выполнения PowerShell на удаленно подписанную. 2. Скрипт лучше оформить в текстовом файле с кодировкой UTF-8 и дать ему какое-либо название, например: script.ps1 3. Запустите скрипт из командной оболочки powershell: или создайте "батник", со строкой запуска скрипта через powershell: положите его рядом со скриптом и запустите. Главное: Прежде, чем запускать скрипт, откорректируйте его под свои параметры, например так: $folder = '\\fs\Obmen\' $olderThan = (get-date).Date.AddDays(-10) dir $folder -file |? {$_.creationtime -lt $olderThan -and $_.lastwritetime -lt $olderThan} |del -WhatIf |
|
------- Отправлено: 08:09, 11-01-2023 | #17 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать YuS_2, Благодарю за ответ.
Про powershell: Естественно я могу такие скрипты запускать, я не умею на них писАть ! Потому и ковырял батники (что проще) Приведенный Вами вариант смогу испробовать через часик. Дам знать. |
Отправлено: 09:20, 11-01-2023 | #18 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Попробовал ....
.ps1 просто схлопывается через секунду, а если через cmd, то "Для продолжения нажмите любую клавишу . . ." и после нажатия такая-же ситуация .... И пробовал запускать под админом. |
Отправлено: 09:52, 11-01-2023 | #19 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
@Echo Off cls Set "BoxIn=\\fs\obmen" Set /A Delta=-10 Call :FromDate %Delta% %Date% "YYYYDDMM" Pushd "%BoxIn%"||(Echo Folder %BoxIn% not found &Pause &Exit /B) FOR /F "usebackq tokens=1,2,3,5* delims=. " %%i In (`2^>nul Dir /O:-D /T:C^|findstr /R /C:"^..\...\..... ..:.. .*"`) DO ( If %%k%%j%%i LSS %YYYYDDMM% (Echo %%k%%j%%i = "%%m" &Del "%%m") ) Popd pause Exit /B 0 :FromDate rem Пересчет даты на заданное кол-во дней rem В первом аргументе +- дни rem Во втором аргументе дата в формате dd.mm.yyyy rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd rem Заимствовано http://forum.oszone.net/thread-186889.html rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd" rem результат в перемменной %yyyymmdd% SetLocal Set "DT=%~2" Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%" Exit /B 0 Проверьте, что у Вас отображается в команде Dir Для отладки, чтобы скрипт реально не удалял файлы, перед Del можно поставить Echo &Echo Del "%%m" |
|
------- Последний раз редактировалось megaloman, 11-01-2023 в 11:59. Отправлено: 11:49, 11-01-2023 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - [решено] Кол-во файлов в папке. | Balancer | Microsoft Windows 7 | 11 | 21-10-2012 20:07 | |
CMD/BAT - Удаление старых файлов по имени файлов | Bиктор | Скриптовые языки администрирования Windows | 1 | 19-04-2010 03:37 | |
[решено] как получить список, если кол-во строчек не постоянно | Russo | AutoIt | 2 | 18-12-2009 10:41 | |
кол-во файлов в папке | rivera | Microsoft Windows NT/2000/2003 | 3 | 29-06-2006 09:38 | |
максимальное кол-во файлов на Cd-ROMе | Dr Mad | Хочу все знать | 1 | 05-09-2005 06:19 |
|