Пакетный файл для переименования файлов (+подпапки)

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

До:

'TBBT - Сезон 06, Эпизод 09 - The Parking Spot Escalation.mkv'

После: «TBBT — S06E09 — The Parking Spot Escalation.mkv»

Я хотел бы переименовать полные шоу одним щелчком мыши, поэтому, по сути, я пытаюсь изменить

«Сезон» на «S» и «Эпизод» на «E»

Вот что я пробовал:

for /r %%x in (*Season 0* Episode 0*) do ren "%%x" *S0*E0*

При попытке сначала заменить пробелы символами подчеркивания я получил только некоторый результат смешивания: «TBBT_-_Season_06_Episode_09_-_The_Parking_S0ot_E0calation»

К сожалению, я застрял здесь...


person XRAY    schedule 30.08.2015    source источник
comment
Вы должны использовать пакетную обработку или подход Python вам тоже подойдет?   -  person albert    schedule 30.08.2015
comment
Зависит от того, насколько легко понять подход Python. Я никогда не использовал python до сих пор, так что это было бы чем-то совершенно новым для меня.   -  person XRAY    schedule 30.08.2015


Ответы (2)


Вы можете использовать следующее:

Setlocal enabledelayedexpansion
Set "Pattern1=Season "
Set "Pattern2= Episode "
Set "Replace1=S"
Set "Replace2=E"

For %%# in ("C:\Folder\*.mkv") Do (
    Set "File=%%~nx#"
    Ren "%%#" "!File:%Pattern1%=%Replace1%!"
    echo %File%
)
For %%# in ("C:\Folder\*.mkv") Do (
    Set "File=%%~nx#"
    Ren "%%#" "!File:%Pattern2%=%Replace2%!"

И еще проще использовать powershell, если вы хотите:

dir "c:\Folder" -file -recurse | rename-item -NewName {$_.name.Replace('Season ','S').replace(' Episode ', 'E')}
person equinox93    schedule 30.08.2015
comment
Чтобы упростить его, я использовал текстовый файл с: Set "Pattern1=old text " Set "Replace1=new text" For %%# in ("C:\Users\XRAY\Desktop\Batch\Test\t2\*.txt") Do ( Set "File=%%~nx#" Ren "%%#" "!File:%Pattern1%=%Replace1%!" ) Я получаю сообщение об ошибке: «Существует повторяющееся имя файла, или файл не может быть найден». Подход PowerShell работает, но не для подпапок. - person XRAY; 30.08.2015
comment
@XRAY Попробуйте отредактированную команду powershell с рекурсией - сначала сделайте это на копиях ваших файлов в качестве теста. - person foxidrive; 30.08.2015
comment
Equinox93: в вашем пакетном коде отсутствует отложенное расширение, но в нем нужно указать, что все символы ! вызовут сбои, а это обычный символ в заголовках. - person foxidrive; 30.08.2015

Поскольку подход Python кажется приемлемым из-за этого комментария вот.

Предположим, что структура каталогов выглядит следующим образом:

.
├── Season1Episode1.mkv
├── Season2Episode2.mkv
└── subfolder
    ├── Season1Episode1.mkv
    └── Season2Episode2.mkv

После запуска приведенного ниже скрипта Python файлы переименовываются по желанию:

.
├── S1E1.mkv
├── S2E2.mkv
└── subfolder
    ├── S1E1.mkv
    └── S2E2.mkv

Сценарий Python3 выглядит следующим образом:

#!/usr/bin/env python3
# coding: utf-8

import os

# rename files or just see how files would be renamed?
DRY_RUN = True

# specify file extension and replacements
EXTENSION = '.mkv'
REPLACE = [('Season', 'S'), ('Episode', 'E')]

# walk through directory and handle files
for path, subdirs, files in os.walk('.'):
    for name in files:
        if name.endswith(EXTENSION):
            full_path = os.path.join(path, name)
            new_path = full_path
            for i in REPLACE:
                new_path = new_path.replace(i[0], i[1])
            print('{} --> {}'.format(full_path, new_path))
            if not DRY_RUN:
                os.rename(full_path, new_path)

Скрипт следует сохранить и выполнить в корневом каталоге, содержащем файлы, которые необходимо переименовать. Несмотря на Python3, ничего дополнительного не требуется. Установите DRY_RUN = True для имитации переименования файлов, тогда как DRY_RUN = False переименует найденные файлы.

person albert    schedule 30.08.2015