powershell を使用して、ファイル (オーディオ) のビット レートが 32kbps を超えるディレクトリ内のすべてのファイルを (再帰的に) リストするにはどうすればよいですか?
4 に答える
Johannes の投稿からのリンク(新しいリンクの場所) から始めて、ディレクトリ内のすべての mp3 ファイルを最小ビットレートで検索するために使用する単純な関数を次に示します。GetDetailsOf
function Get-Mp3Files( [string]$directory = "$pwd", [int]$minimumBitrate = 32 ) {
$shellObject = New-Object -ComObject Shell.Application
$bitrateAttribute = 0
# Find all mp3 files under the given directory
$mp3Files = Get-ChildItem $directory -recurse -filter '*.mp3'
foreach( $file in $mp3Files ) {
# Get a shell object to retrieve file metadata.
$directoryObject = $shellObject.NameSpace( $file.Directory.FullName )
$fileObject = $directoryObject.ParseName( $file.Name )
# Find the index of the bit rate attribute, if necessary.
for( $index = 5; -not $bitrateAttribute; ++$index ) {
$name = $directoryObject.GetDetailsOf( $directoryObject.Items, $index )
if( $name -eq 'Bit rate' ) { $bitrateAttribute = $index }
}
# Get the bit rate of the file.
$bitrateString = $directoryObject.GetDetailsOf( $fileObject, $bitrateAttribute )
if( $bitrateString -match '\d+' ) { [int]$bitrate = $matches[0] }
else { $bitrate = -1 }
# If the file has the desired bit rate, include it in the results.
if( $bitrate -ge $minimumBitrate ) { $file }
}
}
まあ、最初の部分は間違いなくGet-ChildItem -Recurse
. ただし、ビット レートについては、さらにスクリプトを作成する必要があります。Microsoft Scripting Guys は、少し前に、 「ファイルのメタデータを見つけるにはどうすればよいですか」という質問に答えました。おそらくそれを使用して、オーディオ ビット レートを取得し、そのためにフィルター処理することができます。
一般に、組み込みのWindowsコンポーネントによってネイティブにサポートされていることがわかっていることを実行したい場合、最速のルートはCOMである可能性があります。 James Brundageは、これらの機能をその場で発見し、すぐに使用できるようにすることについて、すばらしい投稿をしています。
すさまじい帝王!私は 56K MP3 をいくつか持っているので、それをより良い品質のものと交換する必要があることに気付きました (へー、容量を節約することが重要だったので、ギグではなく数百メガでドライブを測定すると、それらはリッピングされました!) そして今朝、私はおそらくPowershellでそれを行う方法があれば(ファイルからその情報を取得するEDIRというプログラムがありましたが、それはWin 95の時代にさかのぼります...)、このページはpowershellで最初にヒットしましたOR モナド mp3 ビットレート抽出。幸運になることについて話してください!
これを変更して、16:9、16:10 などのすべての壁紙を選択できるようにすることもできます。16:9-10、4:3(縦)、9-10:16、3:4(横)、スクエア、その他。私の(ハ!) 暇な時間の計画のように聞こえます。