У меня есть сценарий, который я нашел, а затем немного изменил для переименования файлов фильма с такими именами, как:

От

"The.Titan.2018.1080p.WEBRip.x264-[YTS.AM].mp4"

к

"The Titan 2018.mp4"

Код, который я использую и модифицированный для моих нужд

Set-Location "X:\AUTOMATED_FILM_&_TV_SHOWS\2_SEPERATING_FOLDER\MOVIES"
Get-ChildItem | Where-Object{$_.BaseName -Match '(.*?\.(19|20)\d{2})\..*'} | Rename-Item -NewName {($_.BaseName -replace '(.*?\.(19|20)\d{2})\..*','$1')+$_.Extension}
dir -Filter *.mp4 | Rename-Item -NewName { $_.BaseName.replace("."," ") + $_.Extension }

У меня возникают проблемы с выяснением того, как внести изменения в этот код, чтобы переименовать файлы моего телешоу с такими именами, как:

От

"Quantico.S03E04.720p.HDTV.x264-KILLERS.mp4"

Я хотел бы изменить имя файла

к

"Quantico S03E04.mp4

2 ответа2

2

Вы можете использовать оператор цикла ForEach с PowerShell и использовать метод Split(), соответственно перебирая файлы с помощью команды Get-ChildItem, а затем переименовывая файлы соответствующим образом, предполагая, что вам всегда нужно переименовывать файлы в этой папке с частями перед первым точка и перед второй точкой плюс оригинальное расширение.

Пример скрипта

$Folder = "X:\AUTOMATED_FILM_&_TV_SHOWS\2_SEPERATING_FOLDER\MOVIES"
$Files = Get-ChildItem $Folder -filter "*.mp4" 

Foreach ($file in $Files){
    $s = [String]$file
    $ext = $file.Extension
    $name = ($s.Split(".")[0] + " " + $s.Split(".")[1] + $ext) 
    Rename-Item -Path $file -NewName $name
}

Дополнительные ресурсы

2

Привет всем спасибо за помощь,

Сок Pimp спасибо за изменение вопроса более подходящим .. Я покопался в интернете в регулярное выражение и сделал несколько проб и ошибок ..

Удалось сгенерировать код, который работает, но во что бы то ни стало он получил улучшение, чтобы сделать его более эффективным, но для имен файлов, которые я получаю, совсем не сильно различаются, поэтому

Код, который, кажется, работает ниже

Set-Location "C:\Users\BRACEGIRDLE\Favorites\Desktop\RENAME"
Dir -Filter *.mkv | Get-ChildItem | Where-Object{$_.BaseName -Match "(.*?\.[A-Z][0-9][0-9][A-Z][0-9][0-9])\..*"} | Rename-Item -NewName {($_.BaseName -replace "(.*?\.[A-Z][0-9][0-9][A-Z][0-9][0-9])\..*",'$1')+$_.Extension}
Dir -Filter *.mkv | Rename-Item -NewName { $_.BaseName.replace("."," ") + $_.Extension }

Dir -Filter *.mp4 | Get-ChildItem | Where-Object{$_.BaseName -Match "(.*?\.(19|20)\d{2})\..*"} | Rename-Item -NewName {($_.BaseName -replace "(.*?\.(19|20)\d{2})\..*",'$1')+$_.Extension}
Dir -Filter *.mp4 | Rename-Item -NewName { $_.BaseName.replace("."," ") + $_.Extension }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .