Как просмотреть все видеофайлы (вид: видео) независимо от того, какое расширение имеют эти файлы (может быть .mkv/.mp4/.mov и т. д.)?

Итак, я знаю, что с помощью этой команды мы можем просмотреть все файлы MKV/MP4 в текущей папке. Но я не хочу искать в Google и выяснять, какие все возможные типы файлов или расширения могут иметь подлинные видеофайлы .webm, .mkv, .mp4, .mov и т. д.

Get-ChildItem -Filter *.mkv | Foreach { $_ }

Я хочу просмотреть все эти файлы, независимо от типов файлов или расширений, если их kind является видеофайлом, я имею в виду, что если вы помните поиск по папкам Windows, там есть параметр kind:video, который перечисляет все видео, не вдаваясь в расширение файла. вещи.

Как я могу сделать это с помощью сценария Powershell??

Поиск в папке Windows не включает «Вид: видео». Вместо этого вы думаете о MacOS? Windows строго использует расширение файла для идентификации типов файлов и ничего больше.

Ken White 21.07.2024 01:16
get-childitem *.webm,*.mkv,*.mp4,*.,mov
js2010 21.07.2024 14:54

Использование com-объекта поиска Windows: stackoverflow.com/a/16295322/6654942

js2010 21.07.2024 15:35

Что, если кто-то переименовал видеофайл example.mp4 в example.docx, вы тоже хотите идентифицировать example.docx как видеофайл?

stackprotector 21.07.2024 17:31

@ js2010, отсутствие необходимости знать и явно перечислять отдельные расширения является заявленной предпосылкой вопроса. Ответ на основе COM API, на который вы ссылаетесь, на первый взгляд многообещающий, но, похоже, имеет свою проблему; Я добавил ссылку на нее и обсуждение своего ответа.

mklement0 21.07.2024 23:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что касается перспективы интерактивного графического интерфейса:Thanks, mclayton.

  • Поиск Windows заменяет Поиск на рабочем столе Windows (WDS) v2.x ; только последняя ссылка напрямую показывает такие примеры, как kind:video, но первая указывает на документацию System.Kind, из которой следует, что kind:video и псевдоним kind:videos все еще поддерживаются.

  • На практике использование этих условий поиска в поле поиска Проводника дает файл изображения, а также несвязанные файлы .ts (файлы TypeScript) из-за случайного столкновения имен с определением расширения имени файла в HKEY_CLASSES_ROOT\.ts, которое указывает на тип файла WMP11.AssocFile.TTS. , предназначенный для видеофайлов MPEG-2 TS. Возможны и другие подобные ложные срабатывания.


При программном использовании:

Вы можете эмулировать kind:video — то есть запрос на поиск всех видеофайлов независимо от их формата — следующим образом:

# Get an array of wildcard patterns that match all filename extensions
# representing video files, e.g. @('*.3g2', ..., '*.mp4', ...)
$includePatterns = 
  (
    Get-ItemProperty registry::HKEY_CLASSES_ROOT\.* -ErrorAction Ignore | 
      Where-Object PerceivedType -eq video
  ).PSChildName -replace '^', '*'

# Filter the target directory by those wildcard patterns.
# Note: If you're targeting the *current* directory, you can simplify to:
#         Get-Item $includePatterns
#       With a given path, make sure to append \*
#       Add -Force to also match hidden files.
Get-Item .\* -Include $includePatterns  # | ...

Примечание:

  • Приведенное выше находит расширения имен файлов, связанные с видеоформатами, которые уже зарегистрированы локально, поэтому они могут не охватывать все известные видеоформаты; см. следующий раздел для альтернативы, которая извлекает все расширения из онлайн-источника.

    • Локальные определения, запрошенные выше, хранятся в кусте реестра HKEY_CLASSES_ROOT, где каждое известное расширение имени файла имеет свой собственный подраздел (например, HKEY_CLASSES_ROOT\.mp4), значение PerceivedType которого классифицирует файлы, использующие это расширение.

    • Предположительно, источником видеоформатов, используемых Windows Search, является тот же набор определений реестра; этот ответ на аналогичный вопрос показывает программное использование Windows Search через COM API, хотя в комментарии в предупреждении говорится, что он работает только с индексированными местоположениями, что исключает общие сетевые ресурсы и съемные диски. Кроме того, на практике я обнаружил, что kind:image работает в интерактивном режиме с индексированной локальной папкой на C:, но не с эквивалентным решением COM API. Кроме того, такое решение еще более сложное и непонятное, чем решение на основе реестра, описанное выше; однако, когда оно работает, оно работает заметно быстрее, чем решение на основе реестра.

  • -Include поддерживает несколько шаблонов в качестве аргумента (массива), разделенных ,, которые, в отличие от одного шаблона, поддерживаемого -Filter, интерпретируются как шаблоны подстановочных знаков PowerShell .[1]

  • Приведенное выше находит видеофайлы, расположенные непосредственно в текущем каталоге; для этого необходимо использовать Get-Item .\*, а не Get-ChildItem, к сожалению, из-за неинтуитивного способа функционирования параметра -Include в настоящее время: см. нижний раздел этого ответа.

  • Чтобы найти видеофайлы во всем поддереве текущего каталога, замените Get-Item .\* на Get-ChildItem . -Recurse; -Include с последним работает так, как и ожидалось.

  • -ErrorAction Ignore в вызове Get-ItemProperty используется для игнорирования ошибок, которые, к сожалению, могут возникнуть из-за ключей реестра, в именах которых есть встроенные символы /, например. MAPI/IPM.Task. Эти ошибки являются результатом того, что PowerShell по замыслу рассматривает оба / и \ как разделители путей, хотя в контексте реестра Windows уместно только \: см. выпуск GitHub #5536.


Онлайн-решение, основанное на парсинге веб-страниц:

Примечание:

  • Мне неясно, существует ли официальный онлайн-реестр всех расширений имен файлов, представляющих видеофайлы; Реестр IANA Media Types для видео определяет строки типов мультимедиа, но, по-видимому, не связанные с ними расширения имен файлов.

  • Приведенное ниже решение основано на веб-скрапинге https://fileinfo.com/filetypes/video

  • Как и в случае с методом графического пользовательского интерфейса и, возможно, с методом на основе реестра, могут быть ложные срабатывания из-за конфликтов имен; в частности, как указывает Маклейтон, в связанном источнике .xml указан как расширение для типа файла Cinelerra Video Project.
    Поэтому вы можете захотеть реализовать жестко запрограммированные исключения для таких расширений.

$includePatterns = 
  [regex]::Matches(
    (Invoke-RestMethod https://fileinfo.com/filetypes/video), 
    '(?<=<a href = "/extension/)[^"]+'
  ).Value -replace '^', '*.'

Get-Item * -Include $includePatterns | Foreach { $_ }

[1] See this answer for background information.

Возможно, я говорю о перекрестных целях, но кажется, что вы можете использовать поисковый запрос, например «kind:video» в поле поиска Windows Explorer: - например, см. i.sstatic.net/Mil281pB.png . Судя по всему, это часть «Windows Desktop Search 2.x», которая «устарела» и заменена «Windows Search» — см. Learn.microsoft.com/en-gb/windows/win32/lwef/… . Ключи реестра PerceivedType, похоже, также связаны — Learn.microsoft.com/en-gb/windows/win32/lwef/…

mclayton 21.07.2024 01:46

Этот код $includePatterns = ( Get-ItemProperty registry::HKEY_CLASSES_ROOT/.* -ErrorAction Ignore | Where-Object PerceivedType -eq video ).PSChildName -replace '^', '*' -join "','" и мне пришлось заключить строку результата в кавычки, как я сделал здесь с запятой, потому что -Include принимает только такой формат, как '*.mkv','*.mp4', с несколькими расширениями видео. Эта предыдущая строка дала мне все расширения видео, хотя только те, которые присутствуют в моей системе, а не то, что я ожидал, например, онлайн-вызов API, но все же, когда я ввожу шаблон -include, он все равно не работает.

Vicky Dev 21.07.2024 02:00

@mklement0 Я хочу сказать, что в вашем ответе все еще необходимы некоторые исправления, он дает мне расширения, но он не соответствует формату, необходимому для переключателя -include, и поэтому не находит видео, несмотря на наличие нескольких видеофайлов типы, присутствующие в папке, в которой я ищу, например. mkv, mp4, тс и т. д.,

Vicky Dev 21.07.2024 02:03

@mclayton Спасибо, я знал, что поиск по папкам Windows (верхняя правая панель @mklement0) можно использовать с любыми файлами, например kind:video, потому что я использую его уже давно. И я просто хочу воспроизвести это с помощью сценария Powershell, но не ограничиваясь тем, что зарегистрировано как видео в моей ОС/жестком диске, а полным скомпилированным списком в Интернете, например, если новый формат видео не зарегистрирован в моем системном реестре, но если Я загрузил это видео и ни разу не просматривал его и не открывал, я все еще хочу, чтобы оно было найдено с помощью kind:video поиска, который я выполняю с помощью этого сценария Powershell, который вы могли бы мне помочь создать.

Vicky Dev 21.07.2024 02:08

@mclayton, спасибо за эти ссылки - я соответствующим образом обновил ответ; Значение PerceivedType в реестре уже является основной частью решения в этом ответе.

mklement0 21.07.2024 04:10

@VickyDev: По параметру -Include: моя вина: действительно, вы должны передать массив строк в -Include, поэтому все, что было нужно, это удалить -join ',' из исходной формы этого ответа - смотрите мое обновление.

mklement0 21.07.2024 04:14

@VickyDev: Что касается вашего желания идентифицировать видеофайлы, независимо от того, определен ли их формат в локальном реестре: мне не ясно, kind:video - чей программный эквивалент вы ищете - действительно выполняет такой вид онлайн-поиска. Если вы знаете, что это так: к какому источнику они обращаются? В любом случае вам следует обновить свой вопрос, чтобы явно указать это требование.

mklement0 21.07.2024 04:24

@VickyDev: я обновил ответ, чтобы показать пример получения всех расширений имен видеофайлов из fileinfo.com/filetypes/video - если вы знаете более авторитетный источник, дайте нам знать.

mklement0 21.07.2024 04:40

@mklement0 — npyw и +1, особенно. потому что ваш ответ также касается дополнительных требований ОП к исчерпывающим типам видео, но ваше предостережение о конфликтах расширений файлов также применимо к списку fileinfo.com с забавным .XML для видеопроекта Cinelerra :-). Полагаю, ОП должен решить, хотят ли они найти все известные типы видео на свете, включая все ложные срабатывания, или просто тщательно подобранное подмножество…

mclayton 21.07.2024 08:07

@mklement0 Ваш обновленный ответ сработал идеально, а также решение онлайн-API, которое вы опубликовали, на данный момент является точным, так что я просто воспользуюсь им. Если я найду какой-либо другой, у которого есть больше списков типов видео, я обновлю его здесь. Большое спасибо!!

Vicky Dev 23.07.2024 02:49

Рад это слышать, @VickyDev; Не за что.

mklement0 23.07.2024 04:53

Другие вопросы по теме