iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Кодировка файла UTF-8 with BOM Если MKVToolNix не в C:\Program Files\MKVToolNix замените везде путь на свой или указывайте параметр при вызове фунуции. Код: function Get-MKVTitle { param ( # Полное имя файла.mkv [Parameter( Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias("FullName")] [string] $file, # Полное имя mkvinfo.exe [ValidateScript( { Test-Path -LiteralPath $_ -PathType Leaf })] [string] $mkvinfo = 'C:\Program Files\MKVToolNix\mkvinfo.exe' ) begin { # Сохранить текущую кодировку косноли $enc = [Console]::OutputEncoding # Установить кодировку консоли в UTF-8, для mkvinfo.exe [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8") # Строка поиска для отбора строки только с названием $match = '\| \+ Title: ' # Строка замены, что бы осталось только название $replace = '| + Title: ' } process { $file = (Resolve-Path -LiteralPath $file) if ($file -match "\.mkv$") { # Получить навание $title = & $mkvinfo $file | Where-Object { $_ -match $match } if ($title) { $title = $title.Replace($replace, '') } [PSCustomObject]@{ FullName = $file Title = $title } } } end { # Восстановить ранее сохранённую кодировку консоли [Console]::OutputEncoding = $enc } } function Set-MKVTitle { param ( # Полное имя файла.mkv [Parameter( Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias("FullName")] [string] $file, # Название внедрямое в файл mkv [Parameter(Mandatory)] [string] $title, # Полное имя mkvpropedit.exe [ValidateScript( { Test-Path -LiteralPath $_ -PathType Leaf })] [string] $mkvpropedit = 'C:\Program Files\MKVToolNix\mkvpropedit.exe' ) begin { # Сохранить текущую кодировку косноли $enc = [Console]::OutputEncoding # Установить кодировку консоли в UTF-8, для mkvpropedit.exe [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8") } process { $file = (Resolve-Path -LiteralPath $file) if ($file -match "\.mkv$") { # Установить навание & $mkvpropedit $file --edit info -s title=$title } } end { # Восстановить ранее сохранённую кодировку консоли [Console]::OutputEncoding = $enc } } function Set-MKVNameToTitle { param ( # Полное имя файла.mkv [Parameter( Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias("FullName")] [string] $file ) process { # Только имя файла, без путей и расширения $BaseName = (Get-Item -LiteralPath $file).BaseName # Название из mkv файла $Title = (Get-MKVTitle -file $file).Title # Если название не совпадает с базовым именем файла if ($Title -ne $BaseName) { # Установить базовое имя файла в качестве названия в mkv Set-MKVTitle -file $file -title $BaseName } } } function Remove-MKVTitle { param ( # Полное имя файла.mkv [Parameter( Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias("FullName")] [string] $file, # Полное имя mkvpropedit.exe [ValidateScript( { Test-Path -LiteralPath $_ -PathType Leaf })] [string] $mkvpropedit = 'C:\Program Files\MKVToolNix\mkvpropedit.exe' ) process { $file = (Resolve-Path -LiteralPath $file) # Удалить навание & $mkvpropedit $file --tags all: -d title } } <# .SYNOPSIS Работа с тегом Название в mkv файле .DESCRIPTION Просмотр тега Название, установка тега Название, установка базового имени файла в качестве Названия .NOTES Название: MKVTitle Версия: 0.2 Автор: iNNOKENTIY21 Зависимость: Требуются утилиты MKVToolNix (смотрите ссылку) .LINK https://mkvtoolnix.download/downloads.html #> | Пример использования: Код: Import-Module MKVTitle.psm1 # Просмотр названий у всех файлов mkv в текущем каталоге Get-ChildItem *.mkv | Get-MKVTitle | Format-Table -AutoSize # Удаление названий во всех файлах mkv в текущем каталоге Get-ChildItem *.mkv | Remove-MKVTitle # Записать указанное название в указанный файл Set-MKVTitle -file FileName.mkv -title "название" # Записать имя файла в качестве названия всем файлам в текущем каталоге Get-ChildItem *.mkv | Set-MKVNameToTitle # Записать имя файла в качестве названия Set-MKVNameToTitle -file FileName.mkv | и т.д. |