Релиз v1.0.0
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#requires -Version 5.1
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$ProjectRoot = Split-Path -Parent $PSScriptRoot
|
||||
$RootPath = Join-Path $ProjectRoot "downloads"
|
||||
$Separator = " - "
|
||||
|
||||
try {
|
||||
$Host.UI.RawUI.WindowTitle = "Группировка альбомов по исполнителям"
|
||||
}
|
||||
catch {
|
||||
}
|
||||
|
||||
function Wait-BeforeExit {
|
||||
Write-Host ""
|
||||
[void](Read-Host "Нажмите Enter для выхода")
|
||||
}
|
||||
|
||||
Clear-Host
|
||||
|
||||
Write-Host "Группировка альбомов по исполнителям" -ForegroundColor Cyan
|
||||
Write-Host "Папка: $RootPath"
|
||||
Write-Host ""
|
||||
|
||||
if (-not (Test-Path -LiteralPath $RootPath -PathType Container)) {
|
||||
New-Item -ItemType Directory -Path $RootPath -Force | Out-Null
|
||||
}
|
||||
|
||||
$AlbumFolders = Get-ChildItem -LiteralPath $RootPath -Directory |
|
||||
Where-Object {
|
||||
$_.Name.Contains($Separator)
|
||||
} |
|
||||
ForEach-Object {
|
||||
$Artist = ($_.Name -split [regex]::Escape($Separator), 2)[0].Trim()
|
||||
|
||||
[PSCustomObject]@{
|
||||
Artist = $Artist
|
||||
Folder = $_
|
||||
}
|
||||
}
|
||||
|
||||
$ArtistGroups = $AlbumFolders | Group-Object -Property Artist
|
||||
|
||||
$Moved = 0
|
||||
$Skipped = 0
|
||||
|
||||
foreach ($Group in $ArtistGroups) {
|
||||
# Папка исполнителя создаётся только при наличии двух и более альбомов.
|
||||
if ($Group.Count -lt 2) {
|
||||
continue
|
||||
}
|
||||
|
||||
$ArtistName = $Group.Name
|
||||
$ArtistPath = Join-Path -Path $RootPath -ChildPath $ArtistName
|
||||
|
||||
if (-not (Test-Path -LiteralPath $ArtistPath -PathType Container)) {
|
||||
New-Item -Path $ArtistPath -ItemType Directory | Out-Null
|
||||
Write-Host "Создана папка: $ArtistName" -ForegroundColor Green
|
||||
}
|
||||
|
||||
foreach ($Album in $Group.Group) {
|
||||
$SourcePath = $Album.Folder.FullName
|
||||
$DestinationPath = Join-Path -Path $ArtistPath -ChildPath $Album.Folder.Name
|
||||
|
||||
if (Test-Path -LiteralPath $DestinationPath) {
|
||||
Write-Warning "Папка уже существует, пропущено: $DestinationPath"
|
||||
$Skipped++
|
||||
continue
|
||||
}
|
||||
|
||||
try {
|
||||
Move-Item `
|
||||
-LiteralPath $SourcePath `
|
||||
-Destination $ArtistPath `
|
||||
-ErrorAction Stop
|
||||
|
||||
Write-Host "Перемещено: $($Album.Folder.Name) -> $ArtistName" -ForegroundColor Cyan
|
||||
$Moved++
|
||||
}
|
||||
catch {
|
||||
Write-Warning "Не удалось переместить '$SourcePath': $($_.Exception.Message)"
|
||||
$Skipped++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Обработка завершена." -ForegroundColor Yellow
|
||||
Write-Host "Перемещено: $Moved"
|
||||
Write-Host "Пропущено: $Skipped"
|
||||
|
||||
Wait-BeforeExit
|
||||
Reference in New Issue
Block a user