0

私は現在、たとえば iPod とは番号の構成が異なる mp3 プレーヤーに音楽を転送しています。1 桁の数字の前に 0 を付ける必要があります (たとえば、1 は 01 にする必要があり、2 は 02 にする必要があります)。たとえば、13 曲のアルバムの場合、1、11、12、13、2、3、4、5、6、7、8、9 の順序になります。手動で入力しなくても、1 桁の数字の前に簡単に 0 を付けるために使用できる powershell コマンドはありますか? または、同じ順序を維持しながら、フォルダー内の曲ファイルに番号付きリストを簡単に追加する方法はありますか? または最後に、1、11、12 などのように数字を整理する代わりに、プログラムがその順序パターンを 1、2、3、4、5、6、7、8、9、10 に変更するようにすることはできますか? 11、12など。すなわち

ありがとうございました。

4

2 に答える 2

0

おそらく、数字と文字の両方を含むファイル名に対してソートが行われるため、プレーヤーはアルファベット順にソートされます。これが、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
于 2018-03-24T08:50:43.667 に答える