在包含多个单独音乐文件的文件夹中,专辑和乐队名称的名称出现在歌曲#和标题之前(例如Band_Name_Album_Name_01_Song_Title.mp3)。文件夹中的每个曲目都以这种方式标题。是否有一个powershell命令可用于删除重复的乐队名称和专辑名称,以便只保留曲目编号和歌曲名称?
我想更改以下文件夹:
Band_Name_Album_Name_01_Song_Title1.mp3
Band_Name_Album_Name_02_Song_Title2.mp3
Band_Name_Album_Name_03_Song_Title3.mp3
Band_Name_Album_Name_04_Song_Title4.mp3
Band_Name_Album_Name_05_Song_Title5.mp3
Band_Name_Album_Name_06_Song_Title6.mp3
对此:
01_Song_Title1.mp3
02_Song_Title2.mp3
03_Song_Title3.mp3
04_Song_Title4.mp3
05_Song_Title5.mp3
06_Song_Title6.mp3
注意:如果只有一个文件夹但是有多个文件夹,我会手动执行此操作。
答案 0 :(得分:0)
如果文件名一致,则以下应工作。
删除" -recurse"切换,如果它不需要通过子文件夹。
get-childitem -path "C:\Folder\Folder" -include *.mp3 -file -recurse | foreach {
try
{
$newFileName = $_.name.split('_')[4..6] -join ('_')
rename-item -path "$($_.Directory)\$($_.name)" -newName "$($_.Directory)\$($newFileName)"
}
catch
{
write-error "Unable to rename ($_.FullName)"
}
}
答案 1 :(得分:0)
要重命名当前文件夹(*.mp3
)中的所有.
个文件:
Get-ChildItem . -Filter *.mp3 |
Rename-Item -NewName { $_.Name -replace '.*_(\d{2}_.*)', '$1' }
添加-Recurse
以递归方式处理所有文件,即在目标文件夹的子树中。
-replace '.*_(\d{2}_.*)', '$1'
将每个输入文件名转换为仅以歌曲索引开头的部分(即删除band-name和album-name部分);这种基于正则表达式的方法非常灵活,可以在歌曲索引之前和之后处理可变数量的标记。
请注意,名称与正则表达式不匹配的任何文件都保持不变。