我目前正在将音乐传输到一个mp3播放器上,它的数字组织方式与ipod不同。我需要将0放在单位数前面(例如,1需要是01,2需要是02),因为如果在单位数前面没有0,并且曲目列表包含的歌曲数量大于10,那么对于具有13首歌曲的专辑,顺序如下:1,11,12,13,2,4,5,6,7,8,9。是否有powershell命令可以轻松地将0放在单位数前面,而不必手动将它们放入?和/或有没有一种方法可以简单地将编号列表添加到文件夹中的歌曲文件中,同时保持相同的顺序?或者最后,我是否可以这样做,而不是组织数字,如1,11,12,等等。程序将其顺序模式更改为1,2,3,4,5,6,7,8,9,10,11,12等。例如,不将0放在个位数前面?
谢谢。
发布于 2018-03-24 14:13:49
让我们首先构建一个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当然,这解决了我刚刚构建的特定场景,因为您没有提供更多关于您自己的场景的详细信息,所以这个地址从1到9变成了从01到09,但是对于需要预先添加的任何数量的0也是如此
发布于 2018-03-24 16:50:44
你的播放器是按字母顺序排序的,可能是因为排序是在同时包含数字和字母的文件名上进行的。这就是为什么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中使用两位数显示数字,可以使用字符串格式。例如:
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.mp3https://stackoverflow.com/questions/49461292
复制相似问题