Лучший способ удалить символы из имени файла после определенной строки символов в Windows

Лучший способ удалить символы из имени файла после определенной строки символов в Windows

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

Например, если у меня есть файл с именем:

Great Movie Title 2021 1080p asldkfjalfj.mkv
Another Great Movie 1997 480p aldfasdfa.avi
Boring movie but its ok 2015 720p asadfqwr.mp4

Я хочу найти 1080p, 720p, 480pв имени файла, а затем удалить все после него.

Я знаю, что можно использовать Windows Batch Forloop, но для его поиска можно использовать только один символ. Даже если это стороннее приложение, которое может это сделать, но я не могу его найти.

решение1

Вы ищете по всему диску или только в одном каталоге?

В любом случае PowerShell с этим справится.

Это действие затронет весь диск C, переименовав все файлы, в имени которых есть 1080p:

cd c:\
Get-ChildItem -recurse -include *1080p* | foreach-object { $name = $_.fullname; $newname = $name -replace '1080p.*\.','1080p.'; rename-item $name $newname } 

Затем вы можете повторить это для 480p и 720p.

решение2

PowerShellэто верный путь.

Вот еще один подход, который может сделать все это за один проход и легко модифицировать.

Это будет запущено из папки верхнего уровня. Это освобождает -Path(позиционный здесь) параметр для фильтрации по нескольким типам файлов, поскольку -Path, в отличие от -Filter, может принимать массив значений.

Get-ChildItem *.mkv, *.avi, *.mp4 -Recurse | ForEach {
    If ( $_.BaseName -match '^.+(1080p|720p|480p)' ) {
        Rename-Item -LiteralPath $_.FullName -NewName ( $matches[0] + $_.Extension )
    }
}

Регулярное выражение '^.+(1080p|720p|480p)'соответствует всем символам от начала имени файла до любой из |строк разрешения "or'd" ( ) включительно. Этот текст сохраняется в $matchesавтоматическом переменном и используется для построения нового имени.

Связанный контент