おそらく、数字と文字の両方を含むファイル名に対してソートが行われるため、プレーヤーはアルファベット順にソートされます。これが、mp3s++ に通常、トラック ID/番号属性が埋め込まれている理由です。これは単なる数値であり、数値の並べ替えに使用できます。トラック番号属性 (存在する場合) を使用してプログラムを並べ替えることができるかどうか、およびその方法は、プログラムによって異なります。
問題のデモと、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 で 2 桁の数値を表示するには、string-format を使用できます。元:
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
数字が 2 桁になるようにファイルの名前を変更するデモ:
(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