|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Удалить файлы из каталога и подкаталогов старше даты Х но младше даты У |
|
|
Любой язык - [решено] Удалить файлы из каталога и подкаталогов старше даты Х но младше даты У
|
Пользователь Сообщения: 105 |
Профиль | Отправить PM | Цитировать Здравствуйте!
Есть каталог "Dir". В этом каталоге - подкаталоги "SubDir1, SubDir2, SubDir3...". В подкаталогах файлы с датой создания начиная с лохматых времен, которые удалять пока нельзя, но и копировать - некуда. В подкаталогах файлы создаются каждый день. Как удалить файлы созданные позже 30.05.21, но раньше 04.05.21? Помогите, пожалуйста. Любой язык, WSH. CMD, Powershell Спасибо! |
|
Отправлено: 15:08, 07-06-2021 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать замените del на write-host чтобы увидеть, что он таки находит нужные файлы.
вот этот вариант отрабатывает на раз, если есть файлы попадающие под фильтр. |
Отправлено: 15:06, 10-06-2021 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 15:47, 10-06-2021 | #22 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Если:
- лохматые времена - это 2000 год и позже - дата в системе отображается как дд.мм.гг или дд.мм.гггг - и я правильно понимаю, что надо удалить файлы с 04.05.21<=дата изменения<=30.05.21 то: Вот CMD
@Echo Off Set "BoxIn=Z:\Box_Arc" Set "Date1=04.05.21" Set "Date2=30.05.21" Set "D1=20%Date1:~-2%%Date1:~3,2%%Date1:~0,2%" Set "D2=20%Date2:~-2%%Date2:~3,2%%Date2:~0,2%" For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /O:D /S "%BoxIn%\*.*"`) Do ( Set "DD=%%~tf" Call :MyDel "%%f" %D1% %D2% %%DD%% ) Exit /B :MyDel Set "DD=%4" Set "DD=20%DD:~-2%%DD:~3,2%%DD:~0,2%" If %2 LEQ %DD% If %DD% LEQ %3 Del %1 Exit /B |
------- Последний раз редактировалось megaloman, 10-06-2021 в 16:15. Отправлено: 16:07, 10-06-2021 | #23 |
Пользователь Сообщения: 105
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Цитата megaloman:
надо удалить файлы созданные в промежуток с 30.05.2021 по 04.06.2021 (первое условие) надо удалить файлы созданные 2,3,4,5 дней назад, то есть при запуске скрипта в субботу удаляются файлы созданные в ЧТ,СР,ВТ,ПН (второе условие) megaloman, скажите пожалуйста, как изменить Ваш код, чтобы он отработал по второму условию, то есть, при запуске скрипта в субботу удаляются файлы созданные в ЧТ,СР,ВТ,ПН Цитата Elven:
|
|||
Отправлено: 09:54, 11-06-2021 | #24 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать тогда жду результатов выполнения вотэтоговот:
$t = Get-Date $rl = Get-ChildItem -File -Recurse | Where-Object {$_.CreationTime -lt $t.Date.AddDays(-1) -and $_.CreationTime -ge $t.Date.AddDays(-4)} if ($null -ne $rl) { Write-Host CreationTime in removing list: $rl | Select-Object CreationTime # $rl.Delete() } else { Write-Host Current time: $t Get-ChildItem -File -Recurse | Select-Object CreationTime } |
Последний раз редактировалось Elven, 11-06-2021 в 10:40. Отправлено: 10:32, 11-06-2021 | #25 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата epoddubniy:
Вот громоздкий CMD, который решает задачу. Работает как по Вашему первому, так и по второму условию
@Echo Off Set "BoxIn=Z:\Box_Arc" Call :Period 04.05.21 30.05.21 Call :FromDate -5 %Date% "Date1" Call :FromDate -2 %Date% "Date2" Call :Period %Date1% %Date2% Exit /B :Period Set "Date1=%1" Set "Date2=%2" Set "D1=20%Date1:~-2%%Date1:~3,2%%Date1:~0,2%" Set "D2=20%Date2:~-2%%Date2:~3,2%%Date2:~0,2%" For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D /O:D /S "%BoxIn%\*.*"`) Do ( Set "DD=%%~tf" Call :MyDel "%%f" %D1% %D2% %%DD%% ) Exit /B :MyDel Set "DD=%4" Set "DD=20%DD:~-2%%DD:~3,2%%DD:~0,2%" If %2 LEQ %DD% If %DD% LEQ %3 Del %1 Exit /B :FromDate rem Пересчет даты на заданное кол-во дней rem В первом аргументе +- дни rem Во втором аргументе дата в формате dd.mm.yyyy rem В третем аргументе имя переменной в кавычках где получим новую дату в формате dd.mm.yyyy rem Заимствовано http://forum.oszone.net/thread-186889.html rem вызов Call :FromNow %DeltaDay% %Date% "MyDate" rem результат в перемменной %MyDate% 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=%dd:~-2%.%mm:~-2%.%yyyy%" GoTo :Eof |
|
------- Отправлено: 10:55, 11-06-2021 | #26 |
Пользователь Сообщения: 105
|
Профиль | Отправить PM | Цитировать Цитата Elven:
PS C:\Users\Кубрин\Desktop> cd C:\test PS C:\test> $t = Get-Date PS C:\test> $rl = Get-ChildItem -File -Recurse | Where-Object {$_.CreationTime -lt $t.Date.AddDays(-1) -and $_.CreationTime -ge $t.Date.AddDays(-4)} PS C:\test> if ($null -ne $rl) { Write-Host CreationTime in removing list: $rl | Select-Object CreationTime # $rl.Delete() } else { Write-Host Current time: $t Get-ChildItem -File -Recurse | Select-Object CreationTime } Current time: 16.06.2021 9:13:34 CreationTime ------------ 29.05.2021 14:19:49 02.06.2021 14:19:05 03.06.2021 14:18:46 28.05.2021 14:20:02 06.06.2021 14:18:03 05.06.2021 14:17:47 01.06.2021 14:19:25 04.06.2021 14:17:30 27.05.2021 14:20:11 Цитата megaloman:
Тогда - вопрос, могу ли я заменить 30.05.21 на переменную %date%? И еще вопрос, можно ли каким-либо образом заранее объявить переменную, например, PeriodDateNachalo, значение которой бы определялось %date% минус 5 дней, чтобы в выражение подставлялись значения переменных, а не ручной ввод? |
||
Отправлено: 09:17, 16-06-2021 | #27 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Цитата epoddubniy:
если Цитата epoddubniy:
Ну и понятное дело ничего не удаляется, потому что ничего не попадает в выборку. |
||
Отправлено: 09:31, 16-06-2021 | #28 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать epoddubniy,
Цитата epoddubniy:
Цитата epoddubniy:
в переменной %Date1% выдаётся дата, отстоящая от %Date% на -5 дней Call :FromDate -2 %Date% "Date2" в переменной %Date2% выдаётся дата, отстоящая от %Date% на -2 дней Если сегодня 16.06.2021, то отладочные Echo выдадут Date =16.06.2021 Date1=11.06.2021 Date2=14.06.2021 Соответственно, в процедуру Call :Period автоматом попадут даты, привязанные к сегодняшней дате. |
||
------- Отправлено: 12:48, 16-06-2021 | #29 |
Пользователь Сообщения: 105
|
Профиль | Отправить PM | Цитировать Всем спасибо!
|
Отправлено: 21:30, 20-06-2021 | #30 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - [решено] Перенести все файлы из каталогов/подкаталогов в субпапку, а пустые папки удалить | Alexander_88 | Скриптовые языки администрирования Windows | 4 | 24-11-2015 20:07 | |
VBS/WSH/JS - Удаление файлов старше даты, доработка | techobsl | Скриптовые языки администрирования Windows | 0 | 14-09-2015 10:24 | |
PowerShell - Удаление файлов старше определенной даты | volk1234 | Скриптовые языки администрирования Windows | 15 | 23-11-2014 14:52 | |
CMD/BAT - удалить файлы по маске из каталога | Gablik | Скриптовые языки администрирования Windows | 15 | 04-09-2012 16:23 | |
CMD/BAT - файлы вида mmdd*.* - для каждой даты нужно создать каталог, скопировать, файлы | milito | Скриптовые языки администрирования Windows | 2 | 24-05-2009 23:32 |
|