Показать полную графическую версию : [решено] Удалить файлы из каталога и подкаталогов старше даты Х но младше даты У
epoddubniy
07-06-2021, 15:08
Здравствуйте!
Есть каталог "Dir".
В этом каталоге - подкаталоги "SubDir1, SubDir2, SubDir3...".
В подкаталогах файлы с датой создания начиная с лохматых времен, которые удалять пока нельзя, но и копировать - некуда.
В подкаталогах файлы создаются каждый день.
Как удалить файлы созданные позже 30.05.21, но раньше 04.05.21?
Помогите, пожалуйста.
Любой язык, WSH. CMD, Powershell
Спасибо!
DJ Mogarych
07-06-2021, 15:40
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()
И вроде бы у ТС было указано "но", т.о. не -or а -and, но тогда какой-то бред получается "раньше чем позже, но позже чем раньше"
DJ Mogarych
07-06-2021, 16:32
Никакого бреда. "And" в данном случае - это файл должен быть создан и после одной даты и до другой одновременно, т. е., такой выборке не будет ничего соответствовать.
Поэтому выбираем файлы до одной даты ИЛИ после другой.
DJ Mogarych, не буду спорить. Тем более, что да - в такую выборку ни один файл не попадет. Но мне вот что-то кажется что ТС даты местами перепутал.
epoddubniy
08-06-2021, 18:41
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
DJ Mogarych, объясните пожалуйста, удалились все архивы и до 14.04.21 и после 26.04.21 и между 14.04-26.04 что я не так сделал? Скажите пожалуйста что означают -gt(это же - "раньше"?), -lt (это же - "later? позже?")
greg zakharov
08-06-2021, 19:50
-gt и -lt - это операторы сравнения, означающие "больше" и " меньше" соответственно. На языке математики это будет выглядеть как > и < соответственно.
В вашем случае проще инвертировать даты в т.н. julian day и определить диапазон значений (с теорией множеств вы же знакомы, верно?), что упростит работу с датами, во-первых, а во-вторых, исключит вероятность ложных удалений.
DJ Mogarych
08-06-2021, 21:18
-gt - greater than
-lt - less than
В данном случае вы указали удалить всё, что раньше 26 апреля и то, что позже 14 апреля. То есть, вообще всё.
Запускать скрипты, не вполне понимая, что они делают, это так себе идея.
greg zakharov
08-06-2021, 23:03
Запускать скрипты, не вполне понимая, что они делают, это так себе идея.Наверное, следует создать тему, в которой нужно прописать CapsLock'ом для всех вопрошающих о необходимости использования параметра -WhatIf при тестах. Тему озаглавить "Золотые правила кодописателя".
Уж сколько раз твердили миру,
Что без WhatIf'a жизнь вредна; но только всё не впрок,
И del в скрипте всегда отыщет уголок.
(с) не И.А. Крылов
epoddubniy
09-06-2021, 16:19
Наверное, следует создать тему, в которой нужно прописать CapsLock'ом для всех вопрошающих о необходимости использования параметра -WhatIf при тестах. Тему озаглавить "Золотые правила кодописателя". »
Сориентируйте пожалуйста, где можно подробно прочитать про этот механизм и в какое места скрипта его нужно имплементировать, чтобы не угодить в столь неловкую ситуацию в очередной раз.
Запускать скрипты, не вполне понимая, что они делают, это так себе идея. »
Не хотел обременять лишними расспросами, полагал, что понимаю, что делаю. Как оказалось - нет.
в т.н. julian day и определить диапазон значений (с теорией множеств вы же знакомы, верно?) »
к сожалению, не знаком, буду гуглить
DJ Mogarych, скажите пожалуйста, каким образом видоизменить Ваш код, чтобы, например, при запуске в субботу удалялись файлы созданные в пн, вт, ср, чт?
greg zakharov
09-06-2021, 17:32
Сориентируйте пожалуйста, где можно подробно прочитать про этот механизмМеханизм - громко сказано, ибо оное всего-навсего т.н. общий параметр, а почерпнуть информацию о нём вы можете либо онлайн на сайте Microsoft, либо во "встроенной" справке. В целом же просто возьмите за правило добавлять в конце директив командлетов -WhatIf, например:
Remove-Item .\sucks.txt -WhatIf
Уж сколько раз твердили миру,
Что без WhatIf'a жизнь вредна; но только всё не впрок,
И del в скрипте всегда отыщет уголок.
(с) не И.А. Крылов
Elven, творчество Крылова - на 70 с лишком процентов вольный перевод Лафонтена, творчество которого в свою очередь на 80 с гаком - Эзоп. Вопрос: сколько процентов в вас от Эзопа?
каким образом видоизменить Ваш код, чтобы, например, при запуске в субботу удалялись файлы созданные в пн, вт, ср, чт?Сделать соответствующую выборку вестимо.
DJ Mogarych
09-06-2021, 17:55
$t = Get-Date
dir D:\Dir -File -Recurse |? {$_.CreationTime -lt $t.Date.adddays(-1) -and $_.CreationTime -ge $t.Date.adddays(-5)} |del
сколько процентов в вас от Эзопа? »
$Esop = 1
$Lafonten = $Esop * 0.8
$Krilov = $Lafonten * 0.7
$Elven = $Krilov * 0.9 #всего-то пару слов поменял...
Write-Host Esop / Elven = $Elven
-------------
Esop / Elven = 0,504
Ну, не то чтобы совсем, но и вот как-то так. 50,4% от Эзопа получается.
greg zakharov
09-06-2021, 19:10
Elven, с учётом примерных данных, снимаю перед вами шляпу!
DJ Mogarych, видимо вы переутомились уже. Критерием выступают пн.-чт. включительно, следовательно:
(ls d:\dir -file -rec).Where{$_.CreationTime.DayOfWeek -in 1..4}
Также строятся и прочие "решето".
DJ Mogarych
09-06-2021, 19:54
Нет, дорогой мой, не обольщайтесь.
Имелось в виду удаление всех файлов на этой неделе, кроме предыдущего дня, а не все понедельники-четверги.
Переутомились, видимо, вы, потому что .dayofweek даёт имя дня, а не номер. Номер даёт
$_.CreationTime.DayOfWeek.value__ -in 1..4
greg zakharov
09-06-2021, 20:12
Номер даёт...Что в Core, что в пятом PowerShell DayOfWeek вполне себя самостоятельно "приводит" к целочисленному типу, так что моя запись корректна и верна - ложка дёгтя в вашу сторону, раз. Вторая ложка дёгтя - приведённый код является обобщением "решета" значений. Будьте так любезны, не сочтите за труд, заранее спасибо, перечитайте вышенаписанное: "также строятся прочие 'решето'". Если русский для вас неродной язык, поясняю: то безличное обобщение; обобщение подразумевает некую шаблонность, - но это уже из области толковых словарей.
DJ Mogarych
09-06-2021, 22:29
Русский я знаю лучше вас, дорогуша.
Не сочтите за труд, бросьте общаться подобным образом с людьми.
greg zakharov
09-06-2021, 22:51
Русский я знаю лучше вас, дорогуша.Вам видней. Только ваш оппонент гетеро, и подобные проявления знаков внимания ни к чему. Верю, что вы ещё встретите свою любовь.
epoddubniy
10-06-2021, 14:37
DJ Mogarych, помогите пожалуйста, не удаляется
Заранее прошу прощения если опубликовал изображение не в том виде или не по правилам.
https://wmpics.pics/di-RX4U.png
https://wmpics.pics/dm-RX4U.png (https://wmpics.pics/pm-RX4U.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.