0

ファイル名から抽出したタイトルと一致するタイトルの曲を音楽ライブラリで検索しています。結果の検索は非常に遅くなります。

ls -Path "C:\Music\New Tracks" | foreach -Process { dir -r -i *.mp3 -Path C:\Music\* | Select-String ([regex]'^.+ - (?<SongTitle>.*)\.mp3$').match($_.Name).Groups[1].Value }

それをスクリプト化するはるかに高速な方法はありますか?

パターンを与えるサンプル ファイル名は次のとおりです。Coldplay Feat Rihanna - Princess Of China.mp3

4

1 に答える 1

3

C:\Music* リストを複数回実行しています - の名前ごとに 1 回ですNew Tracks。これを少し最適化します。例:

$pattern = '^.+ - (?<SongTitle>.*)\.mp3$'
$names = Get-ChildItem 'C:\Music\New Tracks' | 
             Foreach { if ($_.Name -match $pattern) {$matches.SongTitle} }
Get-ChildItem C:\Music -r *.mp3 | 
    Where {$filename = $_.Name; $names | Where {$filename -match $_}}

これは、論理的に思われる MP3 ファイルよりも New Tracks の名前が少ないことを前提としています。

于 2012-06-21T19:29:42.677 に答える