首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将0放在个位数前面

如何将0放在个位数前面
EN

Stack Overflow用户
提问于 2018-03-24 12:41:35
回答 2查看 324关注 0票数 0

我目前正在将音乐传输到一个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放在个位数前面?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-03-24 14:13:49

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

代码语言:javascript
复制
mkdir tmp
cd tmp
FOR /L %i IN (1,1,22) DO echo nothing > my-%i-music-file.mp3

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

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

代码语言:javascript
复制
FOR /L %i IN (1,1,9) DO move my-%i-music-file.mp3 my-0%i-music-file.mp3

当然,这解决了我刚刚构建的特定场景,因为您没有提供更多关于您自己的场景的详细信息,所以这个地址从19变成了从0109,但是对于需要预先添加的任何数量的0也是如此

票数 0
EN

Stack Overflow用户

发布于 2018-03-24 16:50:44

你的播放器是按字母顺序排序的,可能是因为排序是在同时包含数字和字母的文件名上进行的。这就是为什么mp3s++通常嵌入一个音轨ID/编号属性,它只是一个数字,可用于数字排序。是否以及如何使用曲目编号属性(如果有)使程序排序取决于程序。

该问题的演示以及如何在PowerShell中使用数字排序:

代码语言:javascript
复制
#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中使用两位数显示数字,可以使用字符串格式。例如:

代码语言:javascript
复制
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

重命名文件以使数字使用两位数的演示:

代码语言:javascript
复制
(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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49461292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档