Как вы можете перечислить все файлы (рекурсивно) в каталоге, где битовая скорость файла (аудио) превышает 32 Кбит/с с помощью powershell?Получить список файлов рекурсивно с помощью бит-скорости в powershell
ответ
Ну, первая часть определенно будет Get-ChildItem -Recurse
. Однако для скорости передачи данных вам понадобится еще несколько скриптов. Ребята из Scripting Guys ответили на вопрос об этом некоторое время назад: How Can I find Files' Metadata. Вероятно, вы можете использовать это для получения битовой скорости звука и фильтрации для этого.
В общем случае, если вы хотите сделать что-то, что, как вы знаете, поддерживаются встроенным компонентом Windows, самым быстрым маршрутом, скорее всего, будет COM. James Brundage has a great post об обнаружении этих возможностей «на лету» & быстро их использовать.
Начиная с link из Johannes' post, вот простая функция, которая использует GetDetailsOf
найти все mp3 файлы в каталоге с минимальным битрейтом:
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 }
}
}
Император Великолепная! Я понял, что у меня есть некоторые 56K MP3-файлы, которые я должен заменить с лучшим качеством (хе-х, они были разорваны, когда диски были измерены сотнями мегабайт, а не концертами, экономия места - это было важно!) И я подумал сегодня утром, что, вероятно, если есть способ сделать это под Powershell (у меня была программа EDIR, которая получала бы эту информацию из файлов, но это было во времена Win 95 ...), и эта страница была первым хитом под PowerShell ИЛИ monad mp3-бит. Поговорите о том, чтобы повезти!
Я мог бы также понять, чтобы изменить это, чтобы я мог пройти и выбрать все обои, которые находятся в 16: 9, 16:10 или около того, если нечем просто их классифицировать. 16: 9-10, 4: 3 (портрет), 9-10: 16, 3: 4 (пейзаж), квадрат и другие. Звучит как план для меня в мое (ха!) Свободное время.
Это отвечает на вопрос (и работает). ИМХО это должен быть принятый ответ. –