0

我目前正在将音乐传输到一个 mp3 播放器,该播放器的数字组织方式与 ipod 不同。我需要在单个数字前面加 0(例如 1 需要为 01,2 需要为 02),因为如果单个数字前面没有 0,并且曲目列表包含更多的歌曲超过 10 首的专辑,比如 13 首歌曲,其顺序如下:1,11,12,13,2,3,4,5,6,7,8,9。是否有一个 powershell 命令,我可以使用它轻松地将 0 放在单个数字前面,而无需手动输入它们?和/或有没有办法在保持相同顺序的同时简单地将编号列表添加到文件夹中的歌曲文件?或者最后我可以这样做,而不是像 1,11,12 等那样组织数字。程序将其顺序模式更改为 1,2,3,4,5,6,7,8,9,10, 11,12等,即

谢谢你。

4

2 回答 2

0

您的播放器正在按字母排序,可能是因为排序是在包含数字和字母的文件名上完成的。这就是为什么 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
于 2018-03-24T08:50:43.667 回答
0

让我们首先构建一个MWE来重新创建您的场景:

mkdir tmp
cd tmp
FOR /L %i IN (1,1,22) DO echo nothing > my-%i-music-file.mp3

这将创建一个目录,其中包含一些名称中带有数字的假文件

您的问题是,您得到的不是数字排序,而是字母排序,因此您可以通过填充零来解决它,您可以使用以下命令实现:

FOR /L %i IN (1,1,9) DO move my-%i-music-file.mp3 my-0%i-music-file.mp3

当然,这解决了我刚刚构建的特定场景,因为您没有提供有关您的更多详细信息,所以这个地址从1to9变为01to09但同样适用于您可能需要预先添加的任何数量的零

于 2018-03-24T06:13:48.580 回答