2015-06-12 4 views
0

У меня есть несколько видеофайлов и некоторые файлы субтитров. Существует общая часть имени каждого из них, например *E05*.srt и *E05*.mkv.Переименование файлов с похожим шаблоном

Я хотел бы переименовать каждый видеофайл в соответствии с его субтитрами, без .srt проклятия.

Можете ли вы придумать для этого какой-либо скрипт?

Я предполагаю, что это должно быть что-то вроде этого:

Ls *.mkv | ren -path {$_.fullname} -newname { ls -path { "new folder/*" + $_.basename + "*.srt" } | select name } 

я не знаю!

Этот второй ls не имеет проблем, и даст мне субтитры, если я запустил его в одиночку и без ren.

[Я не могу думать о каком-либо лучше названии для этой должности, я буду благодарен, если кто-то может изменить его.]

+3

Вы можете разместить некоторые примеры имен файлов? Является ли перекрывающийся бит всегда E, за которым следуют две цифры? Всегда ли это в одной позиции внутри имен файлов? Есть ли тире или пробелы для работы? – TessellatingHeckler

+0

Я должен отметить, что вторая написанная мной 'ls' делает эту работу. Но это пример: 'BA S03 E01.mkv' и подзаголовок:' BA S03 E01 - Some Episode Name.srt'. И я хочу, чтобы файл 'mkv' был:' BA S03 E01 - Some Episode Name.mkv'. – Akbari

ответ

1

Предполагая, что все файлы субтитров начинаются с базовым именем своего соответствующего видео файлом что-то вроде это должно работать:

Get-ChildItem '*.mkv' | % { 
    $newname = Get-Item ($_.BaseName + '*.srt') | select -First 1 -Expand BaseName 
    if ($newname) { Rename-Item $_ "$newname.mkv" } 
} 

select является псевдонимом для Select-Object, который позволяет выбрать определенные свойства входного объекта (ов). Тем не менее это все равно оставит вас с объектом, просто с определенным набором свойств (даже если это всего лишь один). Однако в некоторых ситуациях вам понадобится только значение свойства вместо объекта с этим свойством. Это то, что для параметра -ExpandProperty (-Expand) для. Он расширяет данное свойство до его значения, в этом случае - в строке basename.

Демонстрация:

PS C:\>Get-Item .\test.txt 

    Directory: C:\ 

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
-a---  13.06.2015  22:54  633 test.txt 

PS C:\>Get-Item .\test.txt | Select-Object BaseName 

BaseName 
-------- 
test 

PS C:\>Get-Item .\test.txt | Select-Object -ExpandProperty BaseName 
test
+0

Спасибо Ансгару, я сделал эту работу. Не могли бы вы объяснить это? Я действительно не получаю детали 'select' и' expand'. – Akbari

Смежные вопросы