PowerShell:仅含单个子目录时扁平化专辑目录结构
PowerShell 实现单光盘专辑目录结构优化
这需求我太熟了,之前整理音乐库的时候刚好处理过类似场景,给你一个精准的PowerShell脚本方案,完全匹配你的要求:
# 替换为你的音乐根目录(所有artist目录的上级文件夹) $rootMusicPath = "D:\Music\Collection" # 遍历所有artist目录 Get-ChildItem -Path $rootMusicPath -Directory | ForEach-Object { $artistFolder = $_ # 遍历当前artist下的每一个title目录 Get-ChildItem -Path $artistFolder.FullName -Directory | ForEach-Object { $titleFolder = $_ # 获取title目录下的所有子目录 $subFolders = Get-ChildItem -Path $titleFolder.FullName -Directory # 核心判断:只有一个子目录,且这个子目录名为"1" if ($subFolders.Count -eq 1 -and $subFolders[0].Name -eq "1") { $disc1Folder = $subFolders[0] Write-Host "正在处理专辑:$($titleFolder.Name)(艺术家:$($artistFolder.Name))" # 将disc1目录下的所有内容移动到title目录 Move-Item -Path "$($disc1Folder.FullName)\*" -Destination $titleFolder.FullName -Force # 删除空的disc1目录 Remove-Item -Path $disc1Folder.FullName -Force Write-Host "处理完成:已将光盘1内容移至专辑目录,并删除空的1目录`n" } } }
关键逻辑说明
- 层级遍历:脚本通过两层
Get-ChildItem遍历artist→title的目录结构,精准定位需要处理的专辑目录 - 条件判断:只在
title目录下**仅有一个子目录,且该目录名为"1"**时执行操作,完全符合你“仅单张光盘时调整”的要求 - 安全操作:
Move-Item的-Force参数会自动处理同名文件(如果有),如果不想覆盖文件,可以去掉这个参数,脚本会报错提示冲突,方便你手动处理
测试建议
在正式运行脚本前,建议先做以下操作确保安全:
- 复制一小部分测试目录到单独文件夹,用测试目录路径替换
$rootMusicPath运行脚本,验证效果 - 或者临时把
Move-Item和Remove-Item换成Write-Output,预览脚本将要执行的操作,确认无误后再恢复原命令
内容的提问来源于stack exchange,提问作者schodge
相关产品推荐
相关产品推荐

