Powershell Предпочтительный способ удаления файла старше x дней - PullRequest
0 голосов
/ 10 июля 2019

Ниже я вижу два метода, выполняющих одну и ту же операцию в Power Shell, который является предпочтительным способом удаления файла старше 1 дня?

Вариант 1:

Get-ChildItem -Path c:\temp -File | ?{($_.LastWriteTime -lt (Get-Date).AddDays(-1)) -and ($_.Name -like "a*") -and ($_.Extension -eq ".csv")} | Select-Object –ExpandProperty FullName | %{Remove-Item $_ -Force -WhatIf}

Вариант 2

Get-ChildItem -Path c:\temp -Filter "a*.csv" -File | Where LastWriteTime -lt  (Get-Date).AddDays(-1)  | Remove-Item -Force -WhatIf

Спасибо

SR

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Вариант 2.

? и where - псевдонимы для командлета where-object. отфильтровывая в сторону, они оба одинаково проверяют, является ли LastWriteTime старше 24 часов.

Как указано HAL9256 , если вам нужно отфильтровать, вы должны сначала сделать это.

Если вам нужна более причудливая фильтрация (например, регулярное выражение), следующая лучшая фильтрация - where-object.

0 голосов
/ 10 июля 2019

Я бы сделал это так.

get-childitem | where { (get-date) - $_.lastwritetime -gt '1' } | remove-item -whatif
0 голосов
/ 10 июля 2019

Выберите вариант 2, потому что вы всегда хотите отфильтровать, прежде чем продолжить работу с конвейером.Работа с меньшим количеством данных заранее в конвейерах всегда будет лучше.

Вариант 1 получит каждый объект файла (например, 100 файлов), передающий конвейер, прежде чем он начнет смотретьпри применении предложения where.

Опция 2 отфильтрует файлы "a*.csv", что всегда будет давать вам меньше файлов (например, 10), прежде чем продолжить работу по конвейеру для применения предложения where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...