Хотя это решение выглядит не так чисто, как другое, оно обрабатывает случай, когда целевые папки еще не существуют. Он также перемещает файлы, которые могут содержать специальные символы, такие как []
. Он также явно игнорирует файлы без расширения, поскольку для них не предъявляется никаких требований. Количество циклов сводится к минимуму благодаря использованию Group-Object
.
$Path = "C:\Somepath"
$files = Get-ChildItem -Path $Path -File |
Group-Object -Property {($_.extension |
Select-String -Pattern "[^. ]+").matches.value
}
Foreach ($ExtGroup in $files) {
$Destination = "$Path\$($ExtGroup.Name)"
if (!(Test-Path -Path $Destination -PathType Container)) {
$null = New-Item -Path $Destination -Type Directory
}
Move-Item -LiteralPath $ExtGroup.Group -Destination $Destination -Force
}