![]() |
Удалить файлы из каталога и подкаталогов старше даты Х но младше даты У
Здравствуйте!
Есть каталог "Dir". В этом каталоге - подкаталоги "SubDir1, SubDir2, SubDir3...". В подкаталогах файлы с датой создания начиная с лохматых времен, которые удалять пока нельзя, но и копировать - некуда. В подкаталогах файлы создаются каждый день. Как удалить файлы созданные позже 30.05.21, но раньше 04.05.21? Помогите, пожалуйста. Любой язык, WSH. CMD, Powershell Спасибо! |
Powershell:
Код:
dir d:\dir -File -Recurse |? {$_.CreationTime -lt ("04.05.21" -as [datetime]) -or $_.CreationTime -gt ("30.05.21" -as [datetime])} |del |
DJ Mogarych, можно сразу в метод:
Код:
(Get-ChildItem d:\dir -File -Recurse |? {$_.CreationTime -lt ("04.05.21" -as [datetime]) -and $_.CreationTime -gt ("30.05.21" -as [datetime])}).Delete() |
Никакого бреда. "And" в данном случае - это файл должен быть создан и после одной даты и до другой одновременно, т. е., такой выборке не будет ничего соответствовать.
Поэтому выбираем файлы до одной даты ИЛИ после другой. |
DJ Mogarych, не буду спорить. Тем более, что да - в такую выборку ни один файл не попадет. Но мне вот что-то кажется что ТС даты местами перепутал.
|
Цитата:
вместо 04.06.21 написал 04.05.21 Код:
dir D:\backup_OS\ugo.FDB -File -Recurse |? {$_.CreationTime -lt ("26.04.21" -as [datetime]) -or $_.CreationTime -gt ("14.04.21" -as [datetime])} |del |
-gt и -lt - это операторы сравнения, означающие "больше" и " меньше" соответственно. На языке математики это будет выглядеть как > и < соответственно.
В вашем случае проще инвертировать даты в т.н. julian day и определить диапазон значений (с теорией множеств вы же знакомы, верно?), что упростит работу с датами, во-первых, а во-вторых, исключит вероятность ложных удалений. |
-gt - greater than
-lt - less than В данном случае вы указали удалить всё, что раньше 26 апреля и то, что позже 14 апреля. То есть, вообще всё. Запускать скрипты, не вполне понимая, что они делают, это так себе идея. |
Цитата:
|
Уж сколько раз твердили миру,
Что без WhatIf'a жизнь вредна; но только всё не впрок, И del в скрипте всегда отыщет уголок. (с) не И.А. Крылов |
Цитата:
Цитата:
Цитата:
DJ Mogarych, скажите пожалуйста, каким образом видоизменить Ваш код, чтобы, например, при запуске в субботу удалялись файлы созданные в пн, вт, ср, чт? |
Цитата:
Код:
Remove-Item .\sucks.txt -WhatIf Цитата:
Цитата:
|
Код:
$t = Get-Date |
Цитата:
Код:
$Esop = 1 |
Elven, с учётом примерных данных, снимаю перед вами шляпу!
DJ Mogarych, видимо вы переутомились уже. Критерием выступают пн.-чт. включительно, следовательно: Код:
(ls d:\dir -file -rec).Where{$_.CreationTime.DayOfWeek -in 1..4} |
Нет, дорогой мой, не обольщайтесь.
Имелось в виду удаление всех файлов на этой неделе, кроме предыдущего дня, а не все понедельники-четверги. Переутомились, видимо, вы, потому что .dayofweek даёт имя дня, а не номер. Номер даёт Код:
$_.CreationTime.DayOfWeek.value__ -in 1..4 |
Цитата:
|
Русский я знаю лучше вас, дорогуша.
Не сочтите за труд, бросьте общаться подобным образом с людьми. |
Цитата:
|
|
замените del на write-host чтобы увидеть, что он таки находит нужные файлы.
вот этот вариант отрабатывает на раз, если есть файлы попадающие под фильтр. Код:
$t = Get-Date |
epoddubniy, дата изменения и дата создания необязательно совпадают.
Посмотрите, что у вас пишет Код:
dir c:\test -file -recurse |select Name,CreationTime,LastWriteTime |
Если:
- лохматые времена - это 2000 год и позже - дата в системе отображается как дд.мм.гг или дд.мм.гггг - и я правильно понимаю, что надо удалить файлы с 04.05.21<=дата изменения<=30.05.21 то: Вот CMD
Код:
@Echo Off если надо удалить файлы вне диапазона с 04.05.21<=дата изменения<=30.05.21
Код:
:MyDel |
Цитата:
![]() Цитата:
надо удалить файлы созданные в промежуток с 30.05.2021 по 04.06.2021 (первое условие) надо удалить файлы созданные 2,3,4,5 дней назад, то есть при запуске скрипта в субботу удаляются файлы созданные в ЧТ,СР,ВТ,ПН (второе условие) megaloman, скажите пожалуйста, как изменить Ваш код, чтобы он отработал по второму условию, то есть, при запуске скрипта в субботу удаляются файлы созданные в ЧТ,СР,ВТ,ПН Цитата:
|
тогда жду результатов выполнения вотэтоговот:
Код:
$t = Get-Date |
Цитата:
Вот громоздкий CMD, который решает задачу. Работает как по Вашему первому, так и по второму условию
Код:
@Echo Off |
Цитата:
Код:
PS C:\Users\Кубрин\Desktop> cd C:\test Цитата:
Код:
Call :Period 04.05.21 30.05.21 Тогда - вопрос, могу ли я заменить 30.05.21 на переменную %date%? И еще вопрос, можно ли каким-либо образом заранее объявить переменную, например, PeriodDateNachalo, значение которой бы определялось %date% минус 5 дней, чтобы в выражение Код:
Call :Period 04.05.21 30.05.21 |
Цитата:
если Цитата:
Ну и понятное дело ничего не удаляется, потому что ничего не попадает в выборку. |
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 автоматом попадут даты, привязанные к сегодняшней дате. |
Всем спасибо!
|
Время: 23:42. |
Время: 23:42.
© OSzone.net 2001-