您的播放器正在按字母排序,可能是因为排序是在包含数字和字母的文件名上完成的。这就是为什么 mp3s++ 通常会嵌入一个 Track ID/Number 属性,它只是一个数字,可以用于数字排序。是否以及如何使用轨道编号属性(如果有)对程序进行排序,取决于程序。
问题演示以及如何在 PowerShell 中使用数字排序:
#Sort by filenames -> alphabetical order = problem
"1_ThisSong.mp3", "2_YourSong.mp3","12_MySong-mp3" | Sort-Object
1_ThisSong.mp3
12_MySong-mp3
2_YourSong.mp3
#Extract the number before _, cast to int-type and sort -> Numeri sort is possible
"1_ThisSong.mp3", "2_YourSong.mp3","12_MySong-mp3" | Sort-Object { $_.Split("_")[0] -as [int] }
1_ThisSong.mp3
2_YourSong.mp3
12_MySong-mp3
要在 PowerShell 中使用两位数显示数字,可以使用字符串格式。前任:
1..13 | ForEach-Object { "{0:00} - MyNewFilename" -f $_ }
01 - MyNewFilename
02 - MyNewFilename
03 - MyNewFilename
04 - MyNewFilename
05 - MyNewFilename
06 - MyNewFilename
07 - MyNewFilename
08 - MyNewFilename
09 - MyNewFilename
10 - MyNewFilename
11 - MyNewFilename
12 - MyNewFilename
13 - MyNewFilename
演示重命名文件,使数字使用两位数:
(Get-ChildItem).Name
12_MySong.mp3
1_ThisSong.mp3
2_YourSong1.mp3
Get-ChildItem -Path 'D:\New folder' -Filter "*.mp3" | ForEach-Object {
$matcheval = {
param($match)
#Output number-value as two digits
"{0:00}" -f ($match.Value -as [int])
}
#Replace any number use two-digit-format
$BaseName = [regex]::Replace($_.BaseName,"\d+",$matcheval)
#Rename file with updated basename
Rename-Item -Path $_.FullName -NewName "$BaseName$($_.Extension)"
}
(Get-ChildItem).Name
01_ThisSong.mp3
02_YourSong01.mp3
12_MySong.mp3