Если самая новая папка, которую вы хотите сохранить, также является папкой с самым новым временем создания, вы можете использовать эту простую однострочную строку:
Get-ChildItem "$env:LOCALAPPDATA\Microsoft\OneDrive" -Directory | sort CreationTime | select -SkipLast 1 | Remove-Item -Recurse -Force
Если вы хотите отфильтровать только определенный типпапки по имени, вы можете использовать простое совпадение регулярных выраженийЯ не могу помочь вам с точным регулярным выражением (так как я должен был бы знать ваш шаблон именования папок), но это выглядело бы примерно так:
Get-ChildItem "$env:LOCALAPPDATA\Microsoft\OneDrive" -Directory | where Name -match '\d\d+' | sort CreationTime | select -SkipLast 1 | Remove-Item -Recurse -Force
(Обратите внимание, что это синтаксис может не работать, если вы используетестарая версия Powershell. Если это так, дайте мне знать, и я предоставлю совместимое решение для отката.)
ОБНОВЛЕНИЕ
В ответ на ваш комментарий: Ваши требованиявсе еще немного неясно, но вот кое-что для начала:
Если вы хотите удалить только папки, которые «похожи» на версии папок, вы можете настроить регулярное выражение в фильтре where._\d+$
будет сопоставлять что-либо с подчеркиванием и цифрами в конце:
where $_.Name -match '_\d+$'
Если вы также хотите убедиться, что это на самом деле версионная копия другой существующей папки, вы также можете проверить это:
where { $_.FullName -match '^(?<OriginalPath>.+)_\d+$' -and (Test-Path $Matches.OriginalPath) }